使用TextFieldParser解析混合CSV文件

时间:2013-04-01 09:13:23

标签: c# parsing csv

您好我要解析一个CSV文件。 CSV文件用|分隔性格。到现在为止还挺好。但是只有一个字段用“char”括起来。 例如

field1|field2|"field3"|field4

当我设置

  

HasFieldsEnclosedInQuotes

为true我将成为异常,否则解析CSV文件会出错。你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

我还没有看过一种文化,'|'是csv分隔符...

总而言之,

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

Pattern用于使用指定的分隔符从CSV文件中分割单行。包括处理报价等 希望能帮到你。

答案 1 :(得分:-2)

快速而肮脏:你可以考虑剥离“事先使用”的所有用途的文件。

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: 此方法适用于仅包含一个单词的数字列或字符串列,但在其他情况下可能会破坏您的csv结构(例如,字段存储html内容) - 请注意可能的副作用。