2012-12-19 20 views
1

這是我的代碼,我用它來使用CsvFileReader類從CSV文件中獲得串格上this URL獲取錯誤串格檔

static void Main(string[] args) 
{ 
    // Read sample data from CSV file 
    ArrayList list = new ArrayList(); 
    List<string> U = new List<string>(); 
    U.Clear(); 
    list.Clear(); 
    using (CsvFileReader reader = new CsvFileReader(@"C:\\path_to_file\file.csv")) 
    { 
    CsvRow row = new CsvRow(); 
    while (reader.ReadRow(row)) 
    { 
     U.Clear(); 
     foreach (string s in row) 
     { 
     //Console.Write(s); 
     //Console.Write(" "); 
     U.Add(s); 
     } 
     list.Add(U); 
     //Console.WriteLine(); 
    } 
    } 

    Console.WriteLine(list); 
    Console.ReadLine(); 
} 

但是我沒有得到的字符串網格,我想。 'list'只包含最後csv行的重複副本,它等於CSV文件中的行數,而不是我正在查找的確切網格。

+0

查看是否有逗號的數據,你應該使用轉義的CSV文件的機制 –

回答

1

我不知道你是什麼意思的字符串「網格」,但我想你的意思是List將包含List<string>的CSV文件的每一行。

您的基本錯誤是使用相同的列表(U)內部循環一遍又一遍。 List<T>是C#中的引用類型,因此您最終一次又一次添加完全相同的對象。

我沒有測試過代碼,但沿着這些線應該有效。

static void Main(string[] args) 
{ 
    // Read sample data from CSV file 
    List<List<string>> list = new List<List<string>>(); 
    using (CsvFileReader reader = new CsvFileReader(@"C:\\path_to_file\file.csv")) 
    { 
    CsvRow row = new CsvRow(); 
    while (reader.ReadRow(row)) 
    { 
     List<string> rowList = new List<string>(); 
     foreach (string s in row) 
     { 
     //Console.Write(s); 
     //Console.Write(" "); 
     rowList.Add(s); 
     } 
     list.Add(rowList); 
     //Console.WriteLine(); 
    } 
    } 

    foreach (List<string> rowList in list) 
    { 
    foreach (string cellData in rowList) 
    { 
     Console.Write(cellData + "\t"); 
    } 
    Console.WriteLine(); 
    } 
    Console.ReadLine(); 
} 
+0

謝謝...這就是我一直在尋找....曾使用即使對於另一個項目也是錯誤的概念....所以會嘗試糾正它.. – Brij123

+0

作爲一個經驗法則,如果您儘可能將變量聲明並實例化到使用它們的地方,那麼它是最清晰的。 – SWeko

0

我可以爲您提供一個函數讀取製表分隔的CSV數據表成: 保存Excel到製表符分隔CSV,你可以閱讀。

public static DataTable ParseCSV(string path) 
    { 
     var dt = new DataTable(); 
     using (var sr = new StreamReader(path, Encoding.UTF8)) 
     { 
      string line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       string[] items = line.Split('\t'); 
       items[1] = ToUpperFirstLetter(items[1].ToLower()); 
       if (dt.Columns.Count == 0) 
       { 
        // column names 
        foreach (string t in items) 
         dt.Columns.Add(new DataColumn(t.Trim(), typeof(string))); 
       } 
       else 
       { 
        //data 
        dt.Rows.Add(items); 
       } 
      } 
     } 
     return dt; 
    } 

用法:

var dt = ParseCSV("c:\\data\\some.txt")