2013-08-21 280 views
0

我正在尝试阅读csv阅读CSV问题

以下是样本。

"0734306547   ","9780734306548  ","Jane Eyre Pink PP      ","Bronte Charlotte      ","FRONT LIST",20/03/2013 0:00:00,0,"PAPERBACK","Y","Pen" 

这里是我使用读取CSV代码

public void readCSV() 
     { 
      StreamReader reader = new StreamReader(File.OpenRead(@"C:\abc\21-08-2013\PNZdatafeed.csv"),Encoding.ASCII); 
      List<string> ISBN = new List<String>(); 

      while (!reader.EndOfStream) 
      { 
       string line = reader.ReadLine(); 
       if (!String.IsNullOrWhiteSpace(line)) 
       { 
        string[] values = line.Split(','); 
        if (values[9] == "Pen") 
        { 
         ISBN.Add(values[1]); 
        } 
       } 
      } 
      MessageBox.Show(ISBN.Count().ToString()); 

     } 

我不能比较它值if (values[9] == "Pen"),因为当我调试的代码,它说values[9]\"Pen\""

怎么办我摆脱了特殊字符。?

+0

String.Replace(“\”“,”“)是我的第一个想法 – VsMaX

+1

这是调试器试图提供帮助,值实际上是”Pen“,但调试器将其显示为转义字符串。链接:http://stackoverflow.com/a/9922604/1822164 –

+2

你应该使用一个CSV阅读库来阅读它 - CSV可能看起来像一个简单的格式,但它不是,正如你发现的那样。当其中一个值包含引号时,例如: – RichieHindle

回答

1

这里的问题在于,每当您发现,并将数据保留为这样的数据时,您就会拆分该行。例如,如果这是你在读行:

"A","B","C" 

且要在逗号分割它,你会得到"A""B""C"为您的数据。根据你的描述,你不需要引用数据。

扔掉引号的字符串:

  1. 检查中最左边的字符是"
  2. 如果是这样,请检查最右边的字符是否为"
  3. 如果是这样,请删除最左边和最右边的字符。

伪代码:

if (data.left(1) == "\"" && data.right(1) == "\"") { 
     data = data.trimleft(1).trimright(1) 
} 

在这一点上,你可能有几个问题(我不知道你有多少经验)。如果其中任何一项适用于您,请随时询问他们,我会进一步解释。

  1. "\""是什么意思?
  2. 如何提取字符串的最左边/最右边的字符?
  3. 如何提取字符串的中间?