3

LINQ でテキスト ファイルから最初の 10 行を読み取る方法を説明できる人はいますか。

StreamReader を使用したコード:

using (var reader = new StreamReader(fileName))
{
    string ListLines = "";
    for (int i = 0; i < 10; i++)
    {
        ListLines[i] = reader.ReadLine();
    }
}
return ListLines;
4

4 に答える 4

10

以下を使用できます。

var lines = File.ReadLines(path).Take(10));

を使用すると、全体をメモリに読み込むのではなく、ファイルからデータをストリーミングできますReadLinesReadAllLines4 (追加されたとき) ではなく、まだ C# 3.5ReadLinesを使用している場合は、以下の実装を使用できます。

public static IEnumerable<string> ReadLines(string filename)
{
    using (TextReader tr = new StreamReader(filename))
    {
        string nextLine = tr.ReadLine();

        while (nextLine != null)
        {
            yield return nextLine;
            nextLine = tr.ReadLine();
        }
    }
}
于 2012-08-22T17:29:13.647 に答える
6

あなたのコードは、目標を達成するためにすでに最適化されています:

var list = new List<string>();
using (var reader = new StreamReader(fileName))
{
    for (int i = 0; i < 10; i++)
    {
        list.Add(reader.ReadLine());
    }
}
return list;

また

using (var reader = new StreamReader(fileName))
{
    for (int i = 0; i < 10; i++)
    {
        yield return reader.ReadLine();
    }
}

また

var r = File.ReadLines(fileName)
            .Take(10)   // limit to first 10
            .ToArray(); // materialize, if needed
于 2012-08-22T17:03:00.350 に答える
4

LINQ スタイル:

using (var textReader = File.OpenText(fileName))
{
    return Enumerable.Range(1, 10).Select(i => textReader.ReadLine());
}
于 2012-08-22T17:04:29.160 に答える
-1

このミックスに興味がありますか :)

using (var reader = new StreamReader(filename))
{
    return (from p in Enumerable.Range(0, 10) select reader.ReadLine()).ToList();
}
于 2012-08-22T22:01:28.283 に答える