我看的分隔字符串解析?
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