【问题标题】:C# Linq Reading File into ListC# Linq 将文件读入列表
【发布时间】:2013-01-17 13:50:46
【问题描述】:

我正在将 csv 文件读入列表。由于每个文件包含许多行且读取时间较长,因此我只需要检查每个文件的前 100 行。如何让 Linq 只读取前 100 行,然后继续下一个文件?

For(i=0;i<10;i++)
     line_list = (from line in File.ReadLines(files[i])
                  let field = line.Split(',')
                  where field[2] == "Apple" && !field[3].Contains("Banana")
                  select field).ToList();

【问题讨论】:

    标签: c# .net linq csv


    【解决方案1】:

    您可以使用Enumerable.Take 只取前 100 行:

    var first100Lines = File.ReadLines(path).Take(100);
    

    为了它的价值,这里是一体的:

    List<List<string[]>> allFileLineColumns = files
        .Select(fPath => 
            File.ReadLines(fPath)
                .Take(100)
                .Select(l => new { Line=l, Cols=l.Split(',') })
                .Where(x => x.Cols.Length >= 4 && x.Cols[2] == "Apple" && !x.Cols[3].Contains("Banana"))
                .Select(x => x.Cols)
                .ToList()
        ).ToList();
    

    虽然我会把它分成多个部分以增加可读性。

    【讨论】:

      【解决方案2】:

      我认为您需要将结果连接到 line_list

                for(i=0; i<10; i++)
                {
                    var fieldsList = from line in File.ReadLines(files[i])
                                     let field = line.Split(',')
                                     where field[2] == "Apple" && !field[3].Contains("Banana")
                                     select field;
      
                      line_list = line_list.Concat(fieldsList.Take(100).ToList()).ToList();
                }
      

      【讨论】:

        【解决方案3】:

        这是一个奇怪的 linq 用例,但试试 take()...

        For(i=0;i<10;i++)
             line_list = (from line in File.ReadLines(files[i]).Take(100)
                          let field = line.Split(',')
                          where field[2] == "Apple" && !field[3].Contains("Banana")
                          select field).ToList();
        

        【讨论】:

        • Take 应该在 ReadLines 上,如 Tims 示例中所示。否则它无论如何都会处理所有行然后Takes 100。
        猜你喜欢
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 2017-11-08
        • 2021-09-25
        • 1970-01-01
        相关资源
        最近更新 更多