2016-07-03 1 views
1

ファイルの最初と最後の行を取得するには、Collections.Generic.IEnumerable(Of String)関数を使用しています。collections.generic.ienumerable(stringの)を使用しているときにファイル内の文字をスキップ

これはうまくいきますが、私がしたいことは、#文字を含む行をスキップしています。

マイコード:

Dim Lines As Collections.Generic.IEnumerable(Of String) = File.ReadLines(strFileName) 
Line0 = Lines.FirstOrDefault 
LineN = Lines.LastOrDefault 
lowestFreq = Line0.Split(New Char() {","c}) 
highestFreq = LineN.Split(New Char() {","c}) 
lowFreq = lowestFreq(0) 
highFreq = highestFreq(0) 

私がもし/いない場合などのバリエーションを試してみましたが、私はちょうど解決策を見つけるように見えることはできません。

私のファイルは、(いくつかのファイルが他のものよりコメント行を持っている)

# a comment 
# the date 
# 
# some other stuff 
12.599,3.513 
15.874,4.246 
20.000,4.884 
25.198,5.912 
31.748,6.063 
40.000,7.020 
50.397,6.267 
63.496,7.251 
80.000,6.875 
etc.. 

次のようになります。

#は、ファイルの先頭でのみ発生します。

+1

Linq where句を使用して#行を除外することができます。 – Codexer

+2

'File.ReadLines(sFile).Where(Function(q)StartsWith("# ")= False)' – Plutonix

+0

Plutonixは正しいトラック。その 'Where'節を' lines'変数の宣言に使用してください。そして 'lines'に対して' FirstOrDefault'と 'LastOrDefault'を呼び出すと、それらは両方ともフィルタリングされます。述語引数を取る 'FirstOrDefault'と' LastOrDefault'のオーバーロードもあるので、 'Where'は実際には必要ありません。 – JamesFaix

答えて

0

変更この:これに

Line0 = Lines.FirstOrDefault 

:言っ

Line0 = Lines.SkipWhile(Function(s) s.StartsWith("#")).FirstOrDefault() 

、それをすることによって、あなたは二回、ファイルのこれらの行を列挙しようとしています。最後の行が必要なので、とにかくファイル全体を読み取らなければならないとすれば、おそらく ReadLinesの代わりに ReadAllLinesと呼ぶべきです。

関連する問題