我看的分隔字符串解析?
A,B的順序解析分隔的字符串,東西,C
但是,這是一個很簡單的例子,和解析分隔的數據可能會很複雜;例如
1, 「你簡單的算法,它失敗」,真
會打擊你的naiive string.Split實施位。有什麼我可以自由使用/竊取/複製和粘貼,爲解析分隔文本提供了一個相對簡單的解決方案? .NET,plox。
更新:我決定去與TextFieldParser,這是VB.NET的一堆隱藏在Microsoft.VisualBasic.DLL的好東西的一部分。
我看的分隔字符串解析?
A,B的順序解析分隔的字符串,東西,C
但是,這是一個很簡單的例子,和解析分隔的數據可能會很複雜;例如
1, 「你簡單的算法,它失敗」,真
會打擊你的naiive string.Split實施位。有什麼我可以自由使用/竊取/複製和粘貼,爲解析分隔文本提供了一個相對簡單的解決方案? .NET,plox。
更新:我決定去與TextFieldParser,這是VB.NET的一堆隱藏在Microsoft.VisualBasic.DLL的好東西的一部分。
我用這從一個文件
string filename = @textBox1.Text;
string[] fields;
string[] delimiter = new string[] {"|"};
using (Microsoft.VisualBasic.FileIO.TextFieldParser parser =
new Microsoft.VisualBasic.FileIO.TextFieldParser(filename)) {
parser.Delimiters = delimiter;
parser.HasFieldsEnclosedInQuotes = false;
while (!parser.EndOfData) {
fields = parser.ReadFields();
//Do what you need
}
}
閱讀我相信有人在這裏可以改變這解析器字符串,它是在內存中。
我在考慮一個通用框架需要指定兩件事情: 1.什麼是分隔字符。 2.在什麼情況下,這些字符不會被計數(例如當它們在引號之間時)。
我覺得在每次你需要做這樣的事情時,編寫自定義邏輯可能會更好。
我不知道任何框架的,但一個簡單的狀態機工作原理:
這裏有一些很好的答案:Split a string ignoring quoted sections
你可能想你的問題重新措辭的東西更精確(?如我可以使用代碼片段或庫在.NET解析CSV數據) 。
簡單的方法是將字符串分割成一個字符數組,尋找您的字符串限定詞和分裂焦炭。
它應該是相對容易的單元測試。
您可以用類似於基本.Spilt方法的擴展方法來包裝它。
爲了做一個無恥的插件,我一直在研究一個名爲fotelo(格式化文本加載器)的庫,我用它來快速解析大量基於分隔符,位置或正則表達式的文本。對於一個快速的字符串來說它是過度殺毒,但如果你使用的是日誌或大量的數據,它可能正是你所需要的。它使用類似於SQL * Loader的控制文件模型(其背後的靈感來源)。
一個非常complrehesive庫可以在這裏找到:FileHelpers
CSV字符串可以包括文本引號內換行字符,所以你不能發出錯誤信號而在狀態2,如果行的末尾。 – cjk 2009-02-26 14:24:03
實際上,我總是忘記可怕的\ n字符,它將大多數CSV解析器搞砸了。澄清。 – 2009-02-26 15:38:34