0

私が達成したいのは、テキストファイルをロードしてから、次のすべての行をカウントすることです:

  1. 文字「X」で始まる
  2. 文字「Y」で終わる

私のコードは次のようになります。

string txtContent;
try
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        txtContent = File.ReadAllText(openFileDialog1.FileName);

    }
}
catch (Exception ex) {
    MessageBox.Show(ex.Message, "Form1", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

txt ファイルの内容をtxtContent文字列変数に読み込んでいます。しかし、私は続行する方法がわかりませんか?

4

4 に答える 4

6

さて、コードを教えるだけではなく、「ヒント」をやってみましょう...

  • 通常、UI スレッドでファイルを読み取ることはお勧めできません。簡単な実験には問題ありませんが、本番コードでは行わないでください。
  • ファイル内のを読み取りたい場合は、(. File.ReadAllLinesNET 2+) またはFile.ReadLines(.NET 4+)を使用します
  • と を使用string.StartsWithstring.EndsWithて、文字列が特定の方法で開始または終了するかどうかを判断します
  • LINQ のCount()メソッドを使用して、述語に一致するアイテムをカウントすることを検討してください
于 2012-07-04T17:36:25.933 に答える
1

宿題にはまったく適していないワンライナー。;)

File.ReadLines(somePath).Count(line=>Regex.IsMatch(line,"(^X.*$)|(^.*Y$)"))
于 2012-07-04T17:59:06.293 に答える
0

これは宿題のようですね。

(の代わりに) File.ReadAllLinesを使用するReadAllTextと、各行の配列が取得されます。

次に、 (および)などのStringのメソッドを使用して、条件を確認できます...StartsWithEndsWith

于 2012-07-04T17:37:17.713 に答える
0

すべてのテキストをメモリに読み込むことは、一致する特定の行を数えることが目的の場合、あまり効率的ではありません。代わりに、バッファリングされたストリームを使用して、一度に 1 行ずつ処理します。

using (FileStream fs = File.Open(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        if (line.StartsWith(START_CHARACTER) || line.EndsWith(END_CHARACTER))
        { 
            count++;
        }
    }
}
于 2012-07-04T17:37:35.573 に答える