テキストから指定バイト数分の文字を取得する方法

解決


かなこ  2002-07-30 21:43:08  No: 1190

最近Delphiをはじめたんですけど、
早速つまづいてます。

改行なしのテキストから、指定したバイト数分だけの文字を取得したいと
思っています。
最初はReadで一文字ずつ取得して指定バイト数までloopしようと
考えていたんですけど、なぜか一文字ずつ取得できなくて困っています。
コードは単純に
    for i := 1 to Byte do begin
      Read(F,Data);          ←これで一文字ずつ取得する予定だった。
      RecData := RecData + Data;
    end;
    ※F      :TextFile;
      RecData:String;
      Data   :String;
です。
ヘルプにもWEBで探しても、これで一文字取れるはずなんですけど、
書き方がまずいんでしょうか?


にしの  2002-07-31 04:19:37  No: 1191

Dataを、Char型にしてみてはどうでしょう。
ヘルプを見ると、型文字列変数と型文字変数で違うようにかかれています。
# なんとなく、型文字列変数、でなく、文字列型変数のような気がしますが、翻訳段階での間違いでしょう


かなこ  2002-07-31 19:19:05  No: 1192

StringからCharにしたら、うまくいきました!
ありがとうございます!

Delphiはいろんな型や似たような関数があるので混乱しそうになりますが
これからも日々勉強してがんばります!
ありがとうございました(^▽^)

    ちなみに型文字列変数うんぬんは、私も見ました。
    で、意味がわかりませんでした。そういうことなんですね…


hatena  2002-08-03 07:43:07  No: 1193

すでに解決しているのにレスを付けるのは、
ちょっと気がひけるのですが、
型無しファイルで宣言して、BlockRead で一気に読み込めば、
ループで回す必要はなくなります。
速度的にもこちらの方が有理だと思います。

下記のような感じです。
var
  ReadLength: integer;
  f: file;
  umRead: Integer;
  RecData: string;
begin

  ReadLength := 20; //読み込み指定サイズ
  AssignFile(F, FileName);
  try
    Reset(F, 1);
    SetLength(RecData, ReadLength);
    BlockRead(F, PChar(RecData)^, ReadLength, umRead);
    if umRead < ReadLength then //指定サイズがファイルサイズより小さい場合
      SetLength(RecData, umRead);
    ShowMessage(RecData);
  finally
    CloseFile(F);
  end;

end;


にしの  2002-08-03 10:39:11  No: 1194

速度が優先なら、ファイル全体をメモリに読み込み、MemoryStreamなどで切り分けた方が早いです。
hatenaさんの方法と組み合わせれば最速の方法の1つになるかと思います。


かなこ  2002-08-05 22:30:05  No: 1195

みなさんがいろいろ教えてくれて、なんだか申し訳ないです。
ファイル一つ読み込むのにもいろんな方法があるんですね。
一度試行錯誤しながら試してみようと思います。

本当にありがとうございます。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加