.net TextFieldParser の ReadFields が空行を無視するので、LineNumberで対応しようとして失敗した話

FileIO.TextFieldParser の ReadFields は、空行をスキップする仕様らしい

という事で
自前のカウンタと現在の行番号を返す LineNumber プロパティを比較して、カウンタが少なければ追加すればいいのでわ?と思いましたが
結論から言うと末尾から2つ目のデータが空行の場合、LineNumberの値で対応できません

LineNumber の動き
1から始まる
現在のシーク位置の行番号が入っている(行頭にカーソルがあるイメージ)
ReadFields() で読み込み直後は、次データの行頭番号を示す(次が空行であっても)
末尾に到達した場合、LineNumber は -1 となる

LineNumberのシーク位置
ファイルオープン直後 LineNumber = 1

ReadFields() 呼び出し1 → LineNumber = 2

ReadFields() 呼び出し2 → LineNumber = 3

ReadFields() 呼び出し3 → LineNumber = -1

末尾から2行目に空行が存在した場合、3回目の ReadFields() 呼び出し後に、カーソルは一気に末尾まで移動し LineNumber の値が -1 となってしまい、自前カウンターとの比較が困難になります

読み込みファイルの末尾にダミーデータを2行以上追加できる環境であれば、LineNumberを用いた空行処理が可能です

コメント