掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
読み取り専用で開く (ID:30471)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>ご教授いただければと思います。 "ご教授"などということは、真っ平御免こうむりたい。 "教えてほしい"ということなら、以下の通り。 ファイルからの一行単位の読み込みは効率が悪いので、バッファサイズ単位で読み込む。 procedure TForm1.Button1Click(Sender: TObject); const BUF_SIZE = $4000-1; var NumRead: DWORD; PosRead: INT64; pT, pH, Buf: PChar; begin with TOpenDialog.Create(nil) do try if not Execute then exit; GetMem(Buf, BUF_SIZE+1); PosRead := 0; try with TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) do try repeat NumRead := Read(Buf^, BUF_SIZE); Buf[NumRead] := #0; pH := Buf; pT := pH; while pT-Buf < BUF_SIZE do begin while not(pT^ in [#0,#10,#13]) do inc(pT); if pT^ <> #0 then begin pT^ := #0; Memo1.Lines.Add(pH); // 切り出した一行の処理 inc(pT, 2); // CRLFを読み飛ばし pH := pT; end else begin pT := pH; break; end; end; inc(PosRead, pT - Buf); Position := PosRead; until NumRead < BUF_SIZE; Memo1.Lines.Add(pH); // 最終行切り出し処理 finally Free; end; finally FreeMem(Buf); end; finally Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.