ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月21日(火) 13:18

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年2月26日(火) 03:09 
オフライン

登録日時: 2008年2月17日(日) 18:55
記事: 18
例によって、だからなんなの?かもしれないシリーズです。恐縮です。
旧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 も無い場合の最終行は後ろに余分な文字が付いてくる事があります。


通報する
ページトップ
投稿記事Posted: 2008年4月11日(金) 14:14 
オフライン

登録日時: 2008年2月17日(日) 18:55
記事: 18
バイト指定を不要にしました。
最終行のCR無しやLF無しやEOFもチェックできてます。
http://www.activebasic.com/forum/viewto ... 9f334cf4e1


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke