0

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

3 に答える 3

5

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

読みやすくするために複数の部分に分割しますが。

于 2013-01-17T13:54:19.513 に答える
0

これは 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();
于 2013-01-17T13:54:30.143 に答える
0

結果を 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();
          }
于 2013-01-17T13:59:33.260 に答える