解析混合csv文件与TextFieldParser

本文关键字:TextFieldParser 文件 csv 混合 | 更新日期: 2023-09-27 18:06:42

你好,我有一个问题来解析csv文件。csv文件用"|"字符分隔。到目前为止一切顺利。但是只有一个字段被"char"包围。例如

field1|field2|"field3"|field4

设置

HasFieldsEnclosedInQuotes

设置为true,则i将成为异常,否则CSV-File的解析将出错。你能帮我一下吗?

解析混合csv文件与TextFieldParser

我还没有见过这样的文化,'|'是csv分隔符…

All in All,

var line = "field1|field2|'"field3'"|field4";
var pattern = string.Format("{0}(?=([^'"]*'"[^'"]*'")*[^'"]*$)", Regex.Escape("|")); 
//{0} in pattern is CSV separator. To get current use System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator
var splitted = Regex.Split(line, pattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture);
foreach (var s in splitted)
    Console.WriteLine(s);
输出:

field1
field2
"field3"
field4

模式设计用于使用指定的分隔符从CSV文件中分割单行。包括处理报价等。

又快又脏:您可以考虑预先剥离文档中所有"的用法。

string path = "c:''test.txt";
string s = System.IO.File.ReadAllText(path, System.Text.Encoding.Default);
s = s.Replace("'"", string.Empty);
System.IO.File.WriteAllText(path, s, System.Text.Encoding.Default);

编辑1:此方法适用于数字列或只包含一个单词的字符串列,但在其他情况下(例如字段存储html内容)可能会破坏您的csv结构-注意可能的副作用