7

以前MyString.Split(Environment.Newline.ToCharArray()[0])は、ファイルの文字列をさまざまな部分に分割していました。しかし、配列内のすべてのアイテムは、最初のアイテムを除いて、\ nで始まりますか?改行で分割する方法は、より良い単語がないために一種の「安っぽい」ことを知っているので、これを行うためのより良い方法がある場合は、教えてください...

これがファイルです... ここに画像の説明を入力してください

4

2 に答える 2

14

一度に1行ずつファイルを読み取る代わりに、を使用して維持したい場合は.Split()、次のことができます...

var splitResult = MyString.Split( new string[]{ System.Environment.NewLine },
    System.StringSplitOptions.RemoveEmptyEntries  );
    /* or System.StringSplitOptions.None if you want empty results as well */

編集:

あなたが抱えていた問題は、UNIX以外の環境では、改行の「文字」が実際には2文字であるということです。したがって、ゼロインデックスを取得すると、実際にはキャリッジリターンで分割されていました...改行文字(\ n)ではありません。

Windows = "\ r \ n"

Unix = "\ n"

http://msdn.microsoft.com/en-us/library/system.environment.newline.aspxごと

于 2012-11-18T04:35:49.467 に答える
1

Windowsの改行は2文字(\rと\n)です。式は、これらの文字のEnvironment.Newline.ToCharArray()[0]1つのみを指定します:\r。したがって、他の文字(\ n)は分割文字列の一部として残ります。

私はあなたがこのようなものを使ってあなたのファイルを読むことを提案します:

public IEnumerable<string> ReadFile(string filePath)
{
   using (StreamReader rdr = new StreamReader(filePath))
   {
       string line;
       while ( (line = reader.ReadLine()) != null)
       {
          yield return line;
       }
   }
}

より多くのエラー処理、別のファイルオープンオプションの指定、またはパスではなくメソッドへのストリームの受け渡しが必要になる場合がありますが、ReadLine()メソッドに対してイテレータを使用するという考えは適切です。その結果、次のようなコードを使用できます。

 foreach (string line in ReadLine(" ... my file path ... "))
 {

 }
于 2012-11-18T04:45:56.990 に答える