ab.com コミュニティ
https://www.activebasic.com/forum/

ファイル・読込み・一行・最大バイト指定
https://www.activebasic.com/forum/viewtopic.php?t=2321
ページ 11

作成者:  まっ [ 2008年2月26日(火) 03:09 ]
記事の件名:  ファイル・読込み・一行・最大バイト指定

例によって、だからなんなの?かもしれないシリーズです。恐縮です。
旧BASICでの LineInput# と同等な感じのルーチンです。探せば他に方法があるかも知れませんが、私は探し切れなかったので自作で普段使用してるものです。
カンマやタブで読込み終了せず、CR , LF , CR+LF までを一行として読み込みます。

''''' FileInputLineByte ファイル・読込み・一行・最大バイト指定
Function ZFILILB(ZHDL as long, ZBYT as long) as string
Dim ZLIN as string , ZCNT as long , ZEOG as long , ZWRK as dword , ZBBB[1] as byte
ZFILILB="" : ZLIN=ZeroString(ZBYT) : ZHDL=ZHDL-1 : SetFilePointer(_System_hFile[ZHDL],-1,0,FILE_CURRENT)
For ZCNT=0 to ZBYT-1 : ReadFile(_System_hFile[ZHDL],ZBBB,1,VarPtr(ZWRK),ByVal 0)
ZLIN[ZCNT]=ZBBB[0] : ZEOG=0 : If ZBBB[0]=10 Then ZEOG=1 else If ZBBB[0]=13 Then ZEOG=2
If ZEOG>0 then SetFilePointer(_System_hFile[ZHDL],ZEOG,0,FILE_CURRENT) : Exit For
Next : If ZCNT>0 then ZFILILB=ZeroString(ZCNT) : memcpy(StrPtr(ZFILILB),StrPtr(ZLIN),ZCNT)
End Function

ZFILILB戻値は、ファイルから読み込まれた一行の文字列です。CR や LF は含みません。
ZHDLハンドルからZBYTバイトを最大バイトとする一行を読込みます。ZBYTの指定理由は、読込み毎の毎回のファイルサイズ取得にかかる時間を省略したかったのと、だいたい1000や10000などの指定で支障が無いと思われる事です。ただしその代償として、EOF 手前に CR も LF も無い場合の最終行は後ろに余分な文字が付いてくる事があります。

作成者:  まっ [ 2008年4月11日(金) 14:14 ]
記事の件名:  不備を吸収して再UPしました。

バイト指定を不要にしました。
最終行のCR無しやLF無しやEOFもチェックできてます。
http://www.activebasic.com/forum/viewto ... 9f334cf4e1

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/