2012-02-03 27 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