1

私が持っているのは、ファイルとその中を検索する文字列だけです

Key
 Value1
 Value2
 Value3

Key1
 Value1

これがファイルの構造です。ここで、キーを検索し、改行 (または単に空の行) が見つかるまで、その下にあるすべての値を読み取ります。

私はこのアルゴリズムを使用しています。

var valuelist = new List<string>();
using(var reader = new StreamReader(@"c:\test.txt"))
{
  String a;
  while( (a=reader.ReadLine())!=null)
 {
  if(!a.Equals("Key")) continue;
  while( a == reader.ReadLine() != null) //check whether end of file is not reached.
  {
    if(a.Length == 0) break; //a empty line is reached.hence comeout.
    valuelist.add(a);
  }
  } 
}
  1. 「リーダー」オブジェクトを自動的に破棄するため、「使用」を使用していますか? この場合、私のアプローチは正しいですか?

  2. このコンテキストで LINQ 式を使用するにはどうすればよいですか?

次のコードを試しました

var all_lines = File.ReadAllLines(@"C:\test.txt");
 //How to retrieve "Values" for a given key using LINQ ?
4

1 に答える 1

2
  1. usingこの文脈での使用は非常に適切です
  2. 特定のキーの値を取得するには、SkipWhile名前でキーを検索しTakeWhileてから、空白行を検索します。

var list = new List<string>{
    "junk", " a", " b", "", "key", " c", " d", " e", "", "more", "f"
};
var vals = list.SkipWhile(s => s != "key").Skip(1).TakeWhile(s => s != "");
foreach (var s in vals) {
    Console.WriteLine(s);
}
于 2012-09-21T10:24:18.767 に答える