C# 格式化文本文件的有效方法

C# 格式化文本文件的有效方法,c#,.net,text-files,C#,.net,Text Files,我有大约2000行的日志文件。我已经完成了第一轮格式化。然而,我遇到了困难,无法将我的日志格式化为我目前想要的格式: 当前: line1: 9/13/2011 3:58:05 AM, abef, 1234, ... line2: 9/14/2011 3:58:05 AM, adef, 1234, ... line3: line4: 9/15/2011 3:58:05 AM, bcdef, 134, ... line5: 3) sdad line6: azd line7: [] asdsdee23

我有大约2000行的日志文件。我已经完成了第一轮格式化。然而,我遇到了困难,无法将我的日志格式化为我目前想要的格式:

当前:

line1: 9/13/2011 3:58:05 AM, abef, 1234, ...
line2: 9/14/2011 3:58:05 AM, adef, 1234, ...
line3:
line4: 9/15/2011 3:58:05 AM, bcdef, 134, ...
line5: 3) sdad
line6: azd
line7: [] asdsdee234 
line2014: 9/16/2011 3:58:05 AM, abcf, 1234, ...
line1: 9/13/2011 3:58:05 AM, abef, 1234, ...
line2: 9/14/2011 3:58:05 AM, adef, 1234, ...
line3: 9/15/2011 3:58:05 AM, bcdef, 134, ...
line2010: 9/16/2011 3:58:05 AM, abcf, 1234, ...
我想要实现的是清理日志,删除不以日期开头的行。因此,需要删除第3、5、6和7行

想要的结果:

line1: 9/13/2011 3:58:05 AM, abef, 1234, ...
line2: 9/14/2011 3:58:05 AM, adef, 1234, ...
line3:
line4: 9/15/2011 3:58:05 AM, bcdef, 134, ...
line5: 3) sdad
line6: azd
line7: [] asdsdee234 
line2014: 9/16/2011 3:58:05 AM, abcf, 1234, ...
line1: 9/13/2011 3:58:05 AM, abef, 1234, ...
line2: 9/14/2011 3:58:05 AM, adef, 1234, ...
line3: 9/15/2011 3:58:05 AM, bcdef, 134, ...
line2010: 9/16/2011 3:58:05 AM, abcf, 1234, ...

在代码中迭代文件的每一行时,有两个选项可以检查日期:

  • 使用评估
    字符串

  • 字符串


当您在代码中遍历文件的每一行时,有两个选项可以检查日期:

  • 使用评估
    字符串

  • 字符串

私有静态IEnumerable ReadOnlyDateTime(字符串路径)
{
日期时间;
字符串输入;
使用(StreamReader流=新StreamReader(路径))
{
while((input=stream.ReadLine()!=null&&DateTime.TryParse(input,out d))
{
收益投入;
}
}
}

DateTime d;
IList=File.ReadLines(路径)
.Where(line=>DateTime.TryParse(line,out d)
.ToList();
然后使用
File.writeAllines()

私有静态IEnumerable ReadOnlyDateTime(字符串路径)将结果转储到磁盘
{
日期时间;
字符串输入;
使用(StreamReader流=新StreamReader(路径))
{
while((input=stream.ReadLine()!=null&&DateTime.TryParse(input,out d))
{
收益投入;
}
}
}

DateTime d;
IList=File.ReadLines(路径)
.Where(line=>DateTime.TryParse(line,out d)
.ToList();

然后使用
文件将结果转储到磁盘。writeAllines()

这个问题太广泛了。请确定您在尝试什么以及在哪里遇到了问题。(请阅读stackoverflow文档以正确格式化数据。)高效并不意味着正确:)你真的关心代码在达到你想要的效果之前是否是最优的吗?我已经试过了,阅读文本文件中的所有行,把它们放在列表中,检查每一行是否以日期开头。(这里我卡住了),并且不确定如果行不是以日期格式开头,如何删除。注意:所有行都是字符串此问题太广泛。请确定您尝试的内容和遇到的问题。(请阅读stackoverflow文档以正确格式化数据。)高效并不意味着正确:)你真的关心代码在达到你想要的效果之前是否是最优的吗?我已经试过了,阅读文本文件中的所有行,把它们放在列表中,检查每一行是否以日期开头。(这里我卡住了),并且不确定如果行不是以日期格式开头,如何删除。注意:所有行都是Strings@abatischev:谢谢你的回复。但是如果你不介意的话,你可以再看一次帖子吗?我编辑过。所有的行都是字符串,因此我认为tryparse不起作用。+1。@10e5x,请提供你的理由“不要认为
TryParse
可以处理字符串”…@10e5x TryParse方法签名:
public static bool TryParse(字符串s,out DateTime结果)
@10e5x:的确,它不会工作。然后使用类似RegEx的
^(.+),.+,…$
并首先获取日期时间部分。然后也可以使用正则表达式或DateTime.TryParse()进行解析。我已经得到了MM/DD/yyyy的正则表达式,但是我找不到M/DD/yyyy的正则表达式,因为我有2012年9月14日这样的日期。@abatischev:谢谢你的回复。但是如果你不介意的话,你可以再次查看这篇文章吗?我编辑过。所有的行都是字符串,因此我认为tryparse不起作用。@10e5x,请提供你的理由。”不要认为
TryParse
与字符串一起工作“…@10e5x TryParse方法签名:
public static bool TryParse(字符串s,out DateTime结果)
@10e5x:的确,它不会工作。然后使用类似RegEx的
^(.+),.+,…$
并首先获取日期时间部分。然后也可以通过RegEx或通过DateTime.TryParse()进行解析.我已经获得了MM/DD/yyyy的正则表达式,但是我找不到M/DD/yyyy的正则表达式,因为我的日期是2012年9月14日。。。。