我知道如何从分开的字符串中获取子字符串,但这里有一个复杂的问题:如果子字符串包含昏迷,怎么办?
如果子字符串包含昏迷、新行或双引号,则整个子字符串将被双引号封装。
如果子字符串包含双引号,则用另一个双引号转义双引号。最坏的情况是,如果我有这样的情况:
first,"second, second","""third"" third","""fourth"", fourth"在这种情况下,子字符串是:
第二,第二个是用双引号封装的,我不希望这些双引号出现在列表/数组中。
“第三”第三是封装双引号,因为它包含双引号,而那些是转义与调整双引号。同样,我不希望将双引号封装在列表/数组中,也不希望双引号转义双引号,但我希望原始双引号是子字符串的一部分。
发布于 2015-05-06 13:32:38
使用TextFieldParser的一种方法
using (var reader = new StringReader("first,\"second, second\",\"\"\"third\"\" third\",\"\"\"fourth\"\", fourth\""))
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
{
parser.Delimiters = new[] { "," };
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData)
{
foreach (var field in parser.ReadFields())
Console.WriteLine(field);
}
}为
first
second, second
"third" third
"fourth", fourth发布于 2015-05-06 13:32:22
尝尝这个
string input = "first,\"second, second\",\"\"\"third\"\" third\",\"\"\"fourth\"\", fourth\"";
string[] output = input.Split(new string[] {"\",\""}, StringSplitOptions.RemoveEmptyEntries);
发布于 2015-05-06 13:33:29
我建议你为这个问题构造一个小的状态机。你会有这样的状态:
这肯定会正确地读到CSV。您也可以使分隔符可配置,以便您支持TSV或分号分隔格式.
还请记住CSV格式中一个非常重要的情况:引用字段可能包含新行!另一个需要注意的特殊情况:空字段(如:,,)。
https://stackoverflow.com/questions/30078054
复制相似问题