2013-08-21 326 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. 如何提取字符串的中間?