0

テキストファイルで繰り返される単語をカウントしたいので、次のコードを書きます
コード

 private void button3_Click(object sender, EventArgs e)
        {
            string line;
            using (StreamReader reader = new StreamReader("D:\\mun.txt"))
            {

                while ((line = reader.ReadLine()) != null)
                {
                    richTextBox1.Text = reader.ToString();
                }
            }
            Regex regex = new Regex("\\w+");
            var frequencyList = regex.Matches(richTextBox1.Text)
                .Cast<Match>()
                .Select(c => c.Value.ToLowerInvariant())
                .GroupBy(c => c)
                .Select(g => new { Word = g.Key, Count = g.Count() })
                .OrderByDescending(g => g.Count)
                .ThenBy(g => g.Word);
            Dictionary<string, int> dict = frequencyList.ToDictionary(d => d.Word, d => d.Count);
            foreach (var item in frequencyList)
            {
                label1.Text =label1.Text+item.Word+"\n";
                label2.Text = label2.Text+item.Count.ToString()+"\n";
            }
        }    

しかし、このコードは間違った結果を返します。このコードはStreamReaderワードのみを取ります。このコードの何が問題なのですか。誰か助けてください。

4

1 に答える 1

2

ファイルからテキストを設定する必要がある場合はReadAllLines、以下のメソッドを使用できます。現在のコードの問題は、テキストを置き換えるたびに while ループ内にありrichTextBox1ます。

richTextBox1.Lines =File.ReadAllLines("D:\\mun.txt")
Regex regex = new Regex("\\w+");
var frequencyList = regex.Matches(richTextBox1.Text)
    .Cast<Match>()
    .Select(c => c.Value.ToLowerInvariant())
    .GroupBy(c => c)
    .Select(g => new { Word = g.Key, Count = g.Count() })
    .OrderByDescending(g => g.Count)
    .ThenBy(g => g.Word);
Dictionary<string, int> dict = frequencyList.ToDictionary(d => d.Word, d => d.Count);
foreach (var item in frequencyList)
{
    label1.Text =label1.Text+item.Word+"\n";
    label2.Text = label2.Text+item.Count.ToString()+"\n";
}
于 2013-05-26T11:56:50.763 に答える