0

ReadLineメソッドを使用してテキストから指定された行を取得したい

これが私のコードです

for (int p = 0; p < 100; p++)
{
    var files = await ApplicationData.Current.LocalFolder.GetFileAsync(logid.Text + ".txt");
    var lines = await FileIO.ReadLinesAsync(files);
    var pattern = sm.SelectedItem.ToString();
    var sline = lines[p].Contains(pattern);

    lv.items.add(lines[sline]);
}

問題はvar slineintに変換されないため、行はそれを読み取ることができません。

実際のプログラムは、選択したコンボボックスの行に含まれるパターンからのみテキストを追加することです。

4

1 に答える 1

2

問題は、リストでラインマッチングパターンを検索する必要があることです。コードは最初の100行を調べて、必要なテキストが含まれているかどうかを確認します。contains()メソッドは、文字列ではなくブール値を返します。

なぜあなたが恣意的に100にループしているのか完全にはわかりませんか?読んでいるファイルは常に正確に100行になりますか?このようなものをもっと探していると思いますか?ループを完全に削除できます。

var files = await ApplicationData.Current.LocalFolder.GetFileAsync(logid.Text + ".txt");
var lines = await FileIO.ReadLinesAsync(files);
var pattern = sm.SelectedItem.ToString();

// try to look up a line in the list the has the pattern we're looking for in it.
var targetLine = lines.FirstOrDefault(line => line.Contains(pattern));
if (!string.IsNullOrEmpty(targetLine))
    lv.items.add(targetLine);

パターンに一致する行が複数ある場合は、linqのWhere()を使用してこれらすべての結果を反復処理する必要があります。

foreach (string line in lines.Where(line => line.Contains(pattern))
    lv.items.add(line);
于 2012-12-12T14:38:54.993 に答える