从csv文件中提取特定列

时间:2013-12-04 20:14:38

标签: c# csv

当我运行此代码时,它在第一次迭代中需要11个元素。在第二次迭代中,它减少到6个元素,在最后一个中它需要1个元素,然后显示“数组超出范围异常”。

我做错了什么?

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (id == column[4])
    {
        return false;
    }
    Array.Clear(column, 0, column.Length);
}

2 个答案:

答案 0 :(得分:0)

如果你说line在第3次迭代中只有1个元素,那么你创建column = line.Split(','),column将有1个元素。所以在这一点上,列[4]是“超出范围”,因为字符串数组中只有一个元素。

你到底想要做什么,所以我们可以给你一个比例外更好的答案。

编辑:所以你的评论所要做的就是看第5列是否与id中的内容匹配,如果是,则返回false?

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (column.Count() >= 5 && column.id == column[4])
    {
        return false;
    }
}

这将确保在尝试访问== check中的第5个元素列[4]之前,列数组中至少有5个元素。

答案 1 :(得分:0)

您是否尝试过确保要检查的行有足够的列?

第4列是指索引4处的列?或者你的意思是指数3的第4列?

private bool SomeMethod(String path, String id)
{
    string [] column ;

    foreach (string line in File.ReadLines(Path))
    {  
        column = line.Split(',');

        //check that there are at least 5 columns before comparing it with ID
        if ((column.Length >= 5) && (id == column[4]))
        {
            return false;
        }
    }
}