2012-02-03 30 views
1

即时通讯相当确定它之前已被问过,但我找不到任何好的。 即时尝试解析日志,但有麻烦。解析日志使用别的字符串拆分c#

起初看起来很容易,因为日志是建立这样的: 事,物,事,物 所以我字符串分割它的,

怎么过的值本身及其可能的是,出现。这是我不知道该怎么做的地方。 我将如何成功解析这种日志?

干杯, 卡格

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

1326139200953,资讯,, 0, “海峡值至极可以包含” ,,, 0

1326139201109 ,信息,, 0, “STR值至极可以包含” 0 ,,,

1326139201265,信息,, 0, “STR值至极可以包含” 0 ,,,

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

1326139368296,新,F:\导演\导演\ file.txt的,1536,0,0

回答

2

如果你的日志文件没有字段封装器,这些字段的宽度是可变的,分隔符/分隔符也可以出现在字段中,那么很可能你不能编程在任何情况下都能工作的东西。

你能举一个你的日志文件数据的例子吗?有可能将你需要的部分与正则表达式匹配。

不幸的是,我认为你的问题目前的状态不能回答,请提供更多信息。

编辑:谢谢你更新的问题,你确实有字段封装(双引号)。这将使它更容易!

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

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

编辑2:给这个一去,让我知道你上车:

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

editted我的第一篇用日志的例子。 – Kage 2012-02-03 14:32:33

+0

请注意,在日志中: 1326139368296,新的,F:\ Dir \ Dir \ file.txt,1536,,0, 没有任何双重qoutes。这些是备份程序的日志。所以可能会有一些'聪明'的人,在他们的文件名中放入 – Kage 2012-02-03 14:54:15

+0

如果备份程序编写正确,那么它会在双引号的逗号前加逗号。我建议你测试它! – jon 2012-02-03 14:58:16