使用除字符串拆分c#之外的其他内容解析日志

时间:2012-02-03 14:06:02

标签: c# parsing csv logging

我很确定之前已被问过,但我找不到任何好的东西。 我试图解析日志但遇到麻烦。

起初它看起来很简单,因为日志是这样构建的: 事,物,事,物 所以我把它分开了,

如何在价值本身中出现a的可能性。这就是我不知道该怎么做的地方。 我如何成功解析这种日志?

干杯, 卡格

编辑~~ 这是一个日志示例:

1326139200953,info ,, 0,“str value wich may contain,”,,, 0

1326139201109,info ,, 0,“str value wich may contain,”,,, 0

1326139201265,info ,, 0,“str value wich may contain,”,,, 0

1326139201999,开始,, 0 0 ,,,,

1326139368296,新的,F:\风向\风向\ file.txt的,1536,,0,...,0

1 个答案:

答案 0 :(得分:2)

如果您的日志文件没有字段封装器,则字段具有可变宽度,并且分隔符/分隔符也可以出现在字段中,那么您可能无法编写在所有情况下都能正常工作的内容。

您能提供日志文件数据的示例吗?可以将所需的部分与正则表达式匹配。

不幸的是,我认为您的问题在当前状态下无法解决,请提供更多信息。

编辑:感谢您更新问题,您确实有字段封装器(双引号)。这样会更容易!

我认为有很多方法可以做到这一点。我个人认为我会继续分裂逗号,但然后循环结果数组,检查任何值的第一个字符是否是双引号。如果是,则需要将其加入到后面的数组项中。如果连接数组项的最后一个字符不是双引号,则需要继续加入,直到您关闭开头双引号。

肯定有更好的方法,所以你可能希望等待另一种解决方案。

编辑2:放手一搏让我知道你是怎么做的:

string myRegex = @"(?<=^(?:[^""]*""[^""]*"")*[^""]*),";
string[] outputArray = Regex.Split(myStr, myRegex);