【问题标题】:Parsing Log using something else than string split c#使用字符串拆分 c# 以外的其他方法解析日志
【发布时间】:2012-02-03 14:06:02
【问题描述】:

我很确定以前有人问过它,但我找不到任何好的东西。 我正在尝试解析日志,但遇到了问题。

起初看起来很简单,因为日志是这样构建的:

thing,thing,thing,thing

所以我在,上进行字符串拆分

但是在值本身中可能会出现,,这就是我不知道该怎么做的地方了。

如何成功解析这种日志?

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

1326139200953,info,,0,"str value which may contain,  ",,,0
1326139201109,info,,0,"str value which may contain,  ",,,0
1326139201265,info,,0,"str value which may contain,  ",,,0
1326139201999,start,,0,,,,0
1326139368296,new,F:\Dir\Dir\file.txt,1536,,0,,0
``

【问题讨论】:

    标签: c# parsing csv logging


    【解决方案1】:

    如果您的日志文件没有字段封装器,字段宽度可变,并且分隔符/定界符也可以出现在字段中,那么您可能无法编写适用于所有情况的程序。

    您能否提供一个日志文件数据示例?可以用正则表达式匹配您需要的部分。

    很遗憾,我认为您的问题在当前状态下无法回答,请提供更多信息。

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

    我认为有很多方法可以做到这一点。就我个人而言,我认为我会继续用逗号分割,然后遍历结果数组,检查任何值的第一个字符是否是双引号。如果是,那么您需要将它加入到它之后的数组项中。如果加入的数组项的最后一个字符不是双引号,则需要继续加入,直到关闭开始的双引号。

    当然有更好的方法,所以您可能希望等待另一个解决方案。

    编辑 2:试一试,让我知道你的进展情况:

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

    【讨论】:

    • 请注意,在日志中:1326139368296,new,F:\Dir\Dir\file.txt,1536,,0,,0 没有任何双引号。这些是备份程序的日志。所以可能会有一些“聪明”的人在他们的文件名中添加 ,
    • 如果备份程序写得好,那么它会在文件名两边加上逗号,双引号,建议你测试一下!
    猜你喜欢
    • 2012-12-25
    • 2018-09-20
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多