CSV文件标题部分即将由LINQ解析

时间:2015-06-15 13:27:07

标签: c# linq csv

以下方式我正在通过LINQ解析csv文件,但是当我检查用户类数据时,我发现标题部分即将到来。代码中有什么问题。

List <string>  list= new List<string>("Box", "Gate", "Car");
string SearchStr ="Box";

    int BoxId= 0;
        foreach (string SearchString in list)
        {
            if (str == SearchString)
            {
                BoxId= list.IndexOf(str);
                break;
            }
        }

3 个答案:

答案 0 :(得分:1)

你好像在错误的地方做Skip(1)

var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());  // IEnumerable<string[]>

目前您正在跳过每行的第一个,而不是第一个

答案 1 :(得分:1)

您正在跳过第一列,而不是第一行,请改用:

csvlines.Skip(1).Select(l => l.Split(',')); 

请注意,如果Skip位于Select之前或之后并不重要,您也可以写一下:

csvlines.Select(l => l.Split(',')).Skip(1)); 

答案 2 :(得分:1)

不要跳过每一行的第一列,而是跳过第一行。也就是说,将Skip(1)移到Select()之前。像这样:

var csvlines = File.ReadAllLines(filename);   // IEnumerable<string>

//var csvLinesData = csvlines.Select(l => l.Split(',').Skip(1).ToArray());  // IEnumerable<string[]>    
// Instead of skipping the first column, skip the first line!
var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());  // IEnumerable<string[]>

int flag = 0;
var users = csvLinesData.Select(data => new User
{
    CSRName = data[6],
    CallStart = data[0],
    CallDuration = data[1],
    RingDuration = data[2],
    Direction = data[3],
    IsInternal = data[4],
    Continuation = data[5],
    ParkTime = data[7]
}).ToList();