2012-03-02 11 views
0

これは非常に簡単な質問かもしれませんが、私は困惑しています。私はデリミタとして二重スペースを持つテキストファイルを読み込もうとしています。方法:二重区切りファイルを開き、一行目をスキップする

"ColHdr1" "ColHdr2" "ColHdr3" "ColHdr4" "ColHDR5" 
"fu" "bar" 1 2 3 
"lorem" "ipsum" 5 6 7 

すべての行をヘッダ行以外のリストに入れたいとします。これは私がこれまで持っているコードです:私が間違ってやっている

"fu" "bar" 1 2 3 
"lorem" "ipsum" 5 6 7 

任意のアイデア:最後に

string prnFile = @"c:\temp\test.prn"; 

var fileLines = new List<string>(); 

foreach (var line in File.ReadAllLines(prnFile, Encoding.GetEncoding(1250)).Skip(1)) 
{ 
    fileLines.Add(line.Split(new[] { " " }, 
       StringSplitOptions.RemoveEmptyEntries)); 
} 

を、私はリストが見えるようにしたいですか?

+1

あなたの結果何と言うだろう場合には役立つだろう現在は... –

答えて

3

あなたのコードでは、一目で私には大丈夫に見えますが、私は、LINQのすべての方法を使用したい:

var lines = File.ReadLines(prnFile, Encoding.GetEncoding(1250)) 
       .Skip(1) 
       .Select(line => line.Split(new[] { " " }, 
              StringSplitOptions.RemoveEmptyEntries)) 
       .ToList(); 

あなたList<string[]>を取得します。それは私のために働くようだが、あなたの文字列の開始/最後から二重引用符を取り除くことはありません。

あなたが本当に平坦化されたリストが必要な場合、それは非常に簡単です - ちょうどSelectManySelectを変更します。

var lines = File.ReadLines(prnFile, Encoding.GetEncoding(1250)) 
       .Skip(1) 
       .SelectMany(line => line.Split(new[] { " " }, 
              StringSplitOptions.RemoveEmptyEntries)) 
       .ToList(); 

をあなたに与えます:

"fu" 
"bar" 
1 
2 
3 
"lorem" 
"ipsum" 
5 
6 
7 
+1

ジョン、それはSelectManyではないでしょうか?私はちょうどそれを書いていた... –

+0

@ChuckSavage: 'リスト'、いいえを取得しないでください。 OPが何をしようとしているのかははっきりしていません。しかし、編集します。 –

関連する問題