2

所以我有这个CSV文件,它的内容是这样的......

"Name","Age","Gender","City, State"

到目前为止,我已经成功地删除了所有地方的双引号 - 除了带有以下代码的第一个和最后一个条目。

using (StreamReader reader = new StreamReader(outputReport))
{
    headers = reader.ReadLine().Split(new string[] { "\",\"" }, 
               StringSplitOptions.RemoveEmptyEntries);
} 

这会产生一个字符串数组,其内容为:

\"Name
Age
Gender
City, State\"

我已经多次尝试删除\"

包括将此添加到我的拆分标准中:

String.Concat('\\','\"')

和这个:

"\\\""

但似乎没有任何效果,我觉得我应该能够在 Split 方法中删除这些。这是一个很难匹配的字符串。有任何想法吗?谢谢您的帮助!

4

3 回答 3

8

不要String.Split()用来读取 CSV 数据!

有太多的边缘情况。你刚刚碰到了这里的冰山一角。此外,它比它需要的要慢得多。您需要一个专用的 CSV 解析器。框架中内置了一个 ( Microsoft.VisualBasic.FileIO.TextFieldParser),您可以下载和使用几个,包括FastCSV我自己的EasyCSV.

于 2013-09-20T13:14:16.150 回答
1

试试这个:s.Replace(@""",","~").Replace(@"""","~").Split('~');其中 s 是读取的 csv 行的字符串值。

于 2013-09-20T13:21:19.533 回答
1

您可以按字符 "(double qoute)、'(Comma) 和 /(Slash) 分割。试试这个:

        using (StreamReader reader = new StreamReader(outputReport))
        {
            char [] splitByCharSet = new char[3]{'\"', '\\', ','};
            headers = reader.ReadLine().Split(splitByCharSet, StringSplitOptions.RemoveEmptyEntries);
        }
于 2013-09-20T13:53:31.017 回答