2010-11-30 6 views
6

私の質問はとても簡単です。 Windowsテキストファイルからすべてのテキスト行を取得する必要があります。 すべての行は\ r \ n記号で区切られています。 私はString.Splitを使用していますが、それはクールではありません。オプションフラグを使用して削除する必要がある空の文字列を「1つのシンボルだけ」に分割するだけです。より良い方法がありますか? GetFromSomeWhereが実際に正規表現であるので、私はこの時点の後に何のファイルをしたんだってWindowsのテキストファイルから行を分割する方法(/ r/n分離)

マイ実装

string wholefile = GetFromSomeWhere(); 

// now parsing 
string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

// ok now I have lines array 

UPDATE

File.ReadAllXXXは、ここでは役に立ちません。

+0

この[提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "コードレビュー ")。それはほとんどそこにある、もう少しサポートが必要です:) – greatwolf

答えて

15

を使用することを見つけることがあります。の

string[] lines = operationtext.Split(new[] { Environment.NewLine }, 
            StringSplitOptions.RemoveEmptyEntries); 

をもちろん、既にファイルパスがある場合は、File.ReadAllLinesを使用する方がはるかに簡単です。

string[] lines = File.ReadAllLines(filePath); 
+1

Reflectorで何が表示されるかわかりません –

+1

@Captain Comic:あなたの質問に答えるために、.NET 3.5で、私は 'File.ReadAllLines' 'StreamReader'を使って行ごとにファイルを読み込み、各行を' ArrayList'に読み込みます。次に、これを 'ArrayList.ToArray'メソッドで文字列配列に変換します。 – Ani

+0

@Captain Comic:理由を説明せずに「使えない」と言います。私はこれらの2つの方法のどちらかまたは両方があなたが求めているものを正確に行えない理由を理解していません。 –

4

String.Splitは文字列(「\ r \ n」など)を受け入れます。 chararrayだけではありません。

string[] lines = wholetext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
3

あなたは、以下のような拡張メソッドを使用することができますし、あなたのコードは次のようになります。

var lines = operationText.ReadAsLines(); 

拡張メソッドの実装:

public static IEnumerable<string> ReadAsLines(this string text) 
    { 
     TextReader reader = new StringReader(text); 
     while(reader.Peek() >= 0) 
     { 
      yield return reader.ReadLine(); 
     } 
    } 

私はそれはのようにパフォーマンスではありません推測しています通常は非常にパフォーマンスの高いスプリットオプションですが、問題でない場合は