0

私のテスターファイルには以下が含まれています:

processes
deleting 
agreed

そして、これはC#のコードです

PorterStemmer testing = new PorterStemmer();
string temp,stemmed;
string[] lines = System.IO.File.ReadAllLines(@"C:\\Users\\PJM\\Documents\\project\\testerfile.txt");
System.Console.WriteLine("Contents of testerfile.txt = ");
for (int i = 0; i <2; i++)
   {
      temp = lines[i];
      stemmed = testing.StemWord(temp);
System.IO.File.WriteAllText(@"C:\\Users\\PJM\\Documents\\project\\testerfile3.txt", stemmed);
       Console.WriteLine("\t" + stemmed);
   }

コードを実行すると、testerfile3 には "agre" のみが含まれます。したがって、ここでの問題は、文字列配列内の各単語を個別に処理することです。つまり、文字列配列へのアクセスに問題があります。文字列配列のすべてのインデックスにアクセスする方法はありますか?

4

1 に答える 1

2

WriteAllTextのドキュメントから:

対象ファイルが既に存在する場合は上書きされます。

したがって、 for ループの各反復でファイルが上書きされ、最後の反復からのテキストのみが残ります。

System.IO.File.AppendAllText代わりに使用できます

また、配列の Length プロパティを使用して、すべての単語をループすることもできますfor (int i = 0; i < lines.Length; i++)

または、for ループの代わりに、LINQ の Select を使用して、ステムなしの行をステム付きの行に射影し、使用AppendAllLinesして結果を書き込むことができます。

System.IO.File.AppendAllLines(@"C:\\Users\\PJM\\Documents\\project\\testerfile3.txt", lines.Select(l => testing.StemWord(l)));
于 2016-10-01T15:23:11.483 に答える