■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#44790-0ファイル途中にあるEOFの扱いについて多摩人2001-07-07(土) 12:42
     #44793-0RE#44790:ファイル途中にあるEOFの扱いについてるーに2001-07-07(土) 15:53
     #44797-0RE#44793:ファイル途中にあるEOFの扱いについて多摩人2001-07-07(土) 19:07
     #44800-0RE#44797:ファイル途中にあるEOFの扱いについてゆう(U)2001-07-07(土) 21:19
     #44804-0RE#44797:ファイル途中にあるEOFの扱いについてよねKEN2001-07-08(日) 01:49
#44790-0
ファイル途中にあるEOFの扱いについて
Do While EOF〜 などとやると、読み込んでる文字列の途中にEOFが含まれていた場合
ファイルを最後まで読んでくれません。
なにか良い方法はないでしょうか?
#44793-0
RE#44790:ファイル途中にあるEOFの扱いについて
> Do While EOF〜 などとやると、読み込んでる文字列の途中にEOFが含まれていた場合
> ファイルを最後まで読んでくれません。
> なにか良い方法はないでしょうか?

Line Input # ステートメント で一行ずつ
末尾まで読んでいるのですね

バイナリ モード でファイルをオープンして
一気に読んでしまえば大丈夫だと思います
こんな感じ

Dim buf As String, Fnum as integer
buf = Space$(FileLen(FileName)) 'バッファ初期化
Fnum = FreeFile
Open FileName For Binary Access Read As #Fnum
Get #Fnum, 1, buf
Close #Fnum
#44797-0
RE#44793:ファイル途中にあるEOFの扱いについて
> Line Input # ステートメント で一行ずつ
> 末尾まで読んでいるのですね

はい、そのとおりです。レスポンスありがとうございます。
前回は説明不足でしたので、細かく説明いたします。
実はアパッチのログを集計していまして、最近アクセス過多のためかログが壊れている場合が
ままあります。
その壊れている部分が、ときおりEOFと同じ文字コードに化けるという現象がそもそもの発端です。
作業自体はアタマから1行づつ読んで、内容によりmdbファイルに追加、というものです。
ですので、せっかくお教えいただいたバイナリモードの読み込みは今回は使えないのでは、思います。
もしかしたらバイナリモードで一気に読み込んで、EOFの部分だけを他の文字コードに置換してから
一旦吐き出し、それを再度読み込む、という手もあると思いますけど、いかんせんファイルがデカくて
(大体毎日100MB)難儀しています。
つまり「バイナリモードで読み込み」→「置換」→「吐き出し」→「Line Input # で読み込み」
という流れですけど、これ以外にいい方法、ご存知でしょうか?
これしかないのでしたら、明日新しいログで実験してみます。
#44800-0
RE#44797:ファイル途中にあるEOFの扱いについて
> つまり「バイナリモードで読み込み」→「置換」→「吐き出し」→「Line Input # で読み込み」
> という流れですけど、これ以外にいい方法、ご存知でしょうか?
InputでOpenし、CByte(&H1A)でEOFがTrueになっても
それ以降をLine Inputで読みこませる方法はあります。

ヘルプ「ファイル  現在の場所」で「Eof 関数」でTureが
発生してのファイルの終端(LOF)に満たない場合はEOFコード
の後へ読みこみ位置を移動すればOKでしょう。

その後、行の復旧をどうするかはご自身で考えてください。
※改行コードがEOFに化けた場合なども・・・
#44804-0
RE#44797:ファイル途中にあるEOFの扱いについて
> つまり「バイナリモードで読み込み」→「置換」→「吐き出し」→「Line Input # で読み込み」
一旦ファイルに吐き出さなくても
「バイナリーモードで読み込み」→「1行ずつ処理して内容によりmdbに追加」
でよいと思いますが。

バイナリーモードで適当なサイズ単位で読み込みつつ、
その中の改行コードをチェックして自前で行を管理する方法です。
このページと関連する記事:
#46642-0ファイルの行数カウント2001-09-07(金) 11:56
#19367-0固定長のファイルの読み込み、書込み2001-03-06(火) 10:47
#8022-0FSOでのバイナリファイルの取扱1999-10-22(金) 12:58
#21351-0読み出しの時間2001-06-14(木) 07:00
#1506-050万行のテキストファイルオープンで固まる2005-03-28(月) 18:12
#33919-0INPUTで質問2000-11-22(水) 12:18
#1411-0OpenステートメントとInput関数について1999-09-09(木) 13:31
#17424-0ファイル保存時の最後の改行2000-12-27(水) 09:41
#36644-0テキストファイルの1行書き換え2001-01-11(木) 11:44
#3296-0TextBOXの読み込み1999-10-25(月) 22:46
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)