2016-07-01 10 views
0

私には分かりませんStreamReader ReadLine returns null when not EOFと似た問題があります。コードは、それが本当に必要な場合ので、私は推測する複雑ではありません。streamreader readlineがeofでなければ何も返しません

Dim myFile As StreamReader 

If Not myFile.EndOfStream Then 
    'Ignore header 
    myFile.ReadLine()  
    Dim line As Integer = 0 
    Do Until myFile.EndOfStream 
     line += 1 
     Dim currentLine = myFile.ReadLine() 
     'At the point line = 4 currentLine is Nothing - why?? 
     processLine(currentLine) 
    Loop 
End If 

私は、ファイルが4なしラインが空であることをより多くの行が含まれていることを保証することができます。ファイルは250列のバー( '|')区切りのテキストファイル(* .txt)であり、ファイルがどのように作成されてもその質問は表示されません。この1つの面倒なファイルで最近まで問題が発生したことは一度もないと言えるのですが、問題の内容をどうやって判断するのでしょうか。私はNotePad ++でファイルを開いていますが、すべてOKです。私が正しく立っていると、ファイルが壊れてしまうという結果は、プロセス関数が空ではないと仮定してプログラムが例外をスローするか、空行を無視するとコードが無限ループになるためです。

さらに、私は実際にレガシーコード(クラシックasp)を編集しようとしているので、私がしているコードに似ているTextStreamオブジェクトを使用するとvbscriptに戻す必要がありますそれを複雑にする、つまり、派手な.NETフレームワークコールはありません。私はそれをデバッグするために.NETを使用していました。

+0

あなたが持っているコードを、あなたは古典とは何の関係も持っていない問題ASP、期間。将来、古典的なASPに変換したい場合は、新しい質問を投稿してください。ここのタグは**無効**です。/cc @Lankymart –

答えて

0

StreamReader.Peek戻りEOFに-1、ない0ので、あなたはNothingを得るのではなくEOFに達したときにループを終了することが合理的です。

ファイル名を持っている場合、それはおそらくSystem.IO.File.ReadLinesでこれを行うには簡単だし、それはまたPeek問題を解決します:

For Each line In File.ReadLines(filePath).Skip(1) 
    processLine(line) 
Next 
+0

私が使っている.NETのバージョン4.5私はその方法が表示されません – Glen

+0

@Glen: 'File'ビットを忘れました、残念です。 – Ryan

+0

@Glen:VBScriptはVB.NETとはまったく異なっているため、後者の例を使用して前者について質問する価値はないでしょう。では、その部分を無視して、ファイルがどのような内容を含むと予想しているかどうか、実際に何が一致しているかを確認する方法について調べます。 – Ryan

関連する問題