c#指数超出范围。 /写入CSV文件

时间:2014-07-13 18:41:35

标签: c# file csv indexoutofrangeexception

嗨,只是一个问题......

foreach (string file in files)
{
    MessageBox.Show(String.Format("Name: {0}", file));
    List<string> newColumnData = new List<string>() { file };
    List<string> lines = File.ReadAllLines(file).ToList();
    lines[1] += ",Name";

    int index = 2;
    //add new column value for each row.
    lines.Skip(2).ToList().ForEach(line =>
    {
        //-1 for header
        MessageBox.Show(index.ToString());
        lines[index] += "," + newColumnData[index - 1];
        index++;
    });
    //write the new content
    File.WriteAllLines(file, lines);
}

数据如下:(标题有2行。)

7/1/2014 to 7/11/2014               
 Category            Trans Date  Post Date   Merchant Name           Amount
Dining Out            6/30/2014  7/1/2014    CLASSICS MARKET CAFE     8.41
Dining Out            7/1/2014   7/2/2014    CHIPOTLE                 12.07
Dining Out            7/3/2014   7/6/2014    THAI CUISI               18.24
Groceries             7/2/2014   7/3/2014    FESTIVAL FOODS           12.79

我想添加一个新的列名称示例“fileName”,其值为“fileName”...只是为了方便起见。

  1. 我收到同样的错误:lines[index] += "," + newColumnData[index - 1]; 但是当通过调试器/ MessageBox检查时,index的值永远不会<0。

  2. 如何在第一个位置而不是最后一列添加新列?

1 个答案:

答案 0 :(得分:0)

因此,如果您的数据有四行,这意味着您将在循环中获得四次迭代,这意味着它正在尝试从数组newColumnData的数组元素1,2,3和4中获取值。但是,newColumnData只有一个元素,索引为0,对吧?

如果你想为每一行添加相同的值,你应该将ForEach循环中间的行更改为:

lines[index] += "," + newColumnData[0];

最后,要在行的开头添加它,请执行以下操作:

lines[index] = newColumnData[0] + "," + lines[index];