最近Delphiをはじめたんですけど、
早速つまづいてます。
改行なしのテキストから、指定したバイト数分だけの文字を取得したいと
思っています。
最初はReadで一文字ずつ取得して指定バイト数までloopしようと
考えていたんですけど、なぜか一文字ずつ取得できなくて困っています。
コードは単純に
for i := 1 to Byte do begin
Read(F,Data); ←これで一文字ずつ取得する予定だった。
RecData := RecData + Data;
end;
※F :TextFile;
RecData:String;
Data :String;
です。
ヘルプにもWEBで探しても、これで一文字取れるはずなんですけど、
書き方がまずいんでしょうか?
Dataを、Char型にしてみてはどうでしょう。
ヘルプを見ると、型文字列変数と型文字変数で違うようにかかれています。
# なんとなく、型文字列変数、でなく、文字列型変数のような気がしますが、翻訳段階での間違いでしょう
StringからCharにしたら、うまくいきました!
ありがとうございます!
Delphiはいろんな型や似たような関数があるので混乱しそうになりますが
これからも日々勉強してがんばります!
ありがとうございました(^▽^)
ちなみに型文字列変数うんぬんは、私も見ました。
で、意味がわかりませんでした。そういうことなんですね…
すでに解決しているのにレスを付けるのは、
ちょっと気がひけるのですが、
型無しファイルで宣言して、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;
速度が優先なら、ファイル全体をメモリに読み込み、MemoryStreamなどで切り分けた方が早いです。
hatenaさんの方法と組み合わせれば最速の方法の1つになるかと思います。
みなさんがいろいろ教えてくれて、なんだか申し訳ないです。
ファイル一つ読み込むのにもいろんな方法があるんですね。
一度試行錯誤しながら試してみようと思います。
本当にありがとうございます。
ツイート | ![]() |