1

これは、この URLで CsvFileReader クラスを使用して CSV ファイルから文字列グリッドを取得するために使用するコードです。

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();
}

ただし、必要に応じて文字列グリッドを取得できません。「リスト」には、CSV ファイルの行数と等しい最後の csv 行の複製コピーのみが含まれており、探している正確なグリッドではありません。

4

2 に答える 2

1

文字列「グリッド」が何を意味するのかわかりませんが、CSV ファイルの各行に 's をList含むことを意味していると思います。List<string>

基本的なエラーは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();
}
于 2012-12-19T11:22:15.673 に答える
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")
于 2012-12-19T11:25:29.223 に答える