我正在寻找解析分隔字符串,大概是
A,B,C
但这是一个非常简单的例子,解析分隔数据会变得复杂;例如
1,“你的简单算法,它失败了”,真的
会破坏你的naiive string.Split实现到位。有什么我可以自由使用/窃取/复制和粘贴,为解析分隔文本提供了相对防弹的解决方案吗? .NET,plox。
更新:我决定使用TextFieldParser,这是VB.NET隐藏在Microsoft.VisualBasic.DLL中的好东西的一部分。
答案 0 :(得分:4)
我用它来读取文件
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)
我不知道任何框架,但是一个简单的状态机可以工作:
答案 2 :(得分:2)
如
var elements = new List<string>();
var current = new StringBuilder();
var p = 0;
while (p < internalLine.Length) {
if (internalLine[p] == '"') {
p++;
while (internalLine[p] != '"') {
current.Append(internalLine[p]);
p++;
}
// Skip past last ',
p += 2;
}
else {
while ((p < internalLine.Length) && (internalLine[p] != ',')) {
current.Append(internalLine[p]);
p++;
}
// Skip past ,
p++;
}
elements.Add(current.ToString());
current.Length = 0;
}
答案 3 :(得分:2)
可在此处找到一个非常复杂的库:FileHelpers
答案 4 :(得分:1)
这里有一些好的答案:Split a string ignoring quoted sections
您可能希望将问题重新定义为更精确的问题(例如我可以使用什么代码段或库来解析.NET中的CSV数据?)。
答案 5 :(得分:1)
要做一个无耻的插件,我已经在一个名为fotelo(格式化文本加载器)的库上工作,我用它来快速解析基于分隔符,位置或正则表达式的大量文本。对于快速字符串来说,这是过度杀伤,但如果您正在使用日志或大量数据,则可能正是您所需要的。它使用类似于SQL * Loader的控制文件模型(它背后的灵感)。
答案 6 :(得分:1)
答案 7 :(得分:0)
我认为通用框架需要在两件事之间指定: 1.什么是划界字符。 2.在什么条件下这些字符不计算(例如它们在引号之间)。
我认为每次你需要做这样的事情时,编写自定义逻辑可能会更好。
答案 8 :(得分:0)
最简单的方法就是将字符串拆分为char数组并查找字符串确定符和split char。
单元测试应该相对容易。
您可以将其包装在类似于基本.Spilt方法的扩展方法中。