-1

ファイルからテキストをロードする Visual Basic のコードがあります。それを Delphi に翻訳する必要がありますが、方法がわかりません。

Open txtFile.Text For Binary As #1
file = Space(LOF(1))
Get #1, , file
Close #1

このコードを Delphi で動作させるにはどうすればよいですか?

4

3 に答える 3

4

Delphi が古すぎない場合は、次のようにすることができます。

uses IOUtils;
...
S := TFile.ReadAllText('MyFileName.txt');

RTL がすでに十分に優れたものを提供している場合、独自のソリューションを発明しないでください。

于 2013-07-13T08:52:09.067 に答える
1

TxtFile.text プロパティで指定された TFileStream を使用してファイルを開くことができます。「#1」はファイル ハンドルを意味しますが、OOP アプローチを使用しているため必要ありません。

Open txtFile.Text For Binary As #1 は、ファイルをテキスト モードではなく (メモ帳で開くなど) btu で開くことを意味するため、ASCII 文字に変換されるものは何もありません。すべてが文字としてではなく広告バイトとして読み取られます

LOF(1) はファイルの長さ (ハンドル 1) を返すようで、「スペース」はファイルの長さと同じ数のスペース文字 (#32) を含む文字列を生成し、それを変数「ファイル」に割り当てます。次に、ファイルハンドルを閉じます。

例として:

var
    FileContents: AnsiString; // Or an 'array of Byte' instead
    Stream: TFileStream;
begin
    Stream := TFileStream.Create(txtFile.Text, fmOpenRead);
    try
        SetLength(FileContents, Stream.Size);
        if Length(FileContents) > 0 then
            Stream.ReadBuffer(Pointer(FileContents)^, Stream.Size);
    finally
      Stream.Free;
    end;
    // Use FileContents as needed...
end;

免責事項:

  • まだテストしていません。現在、開発用コンピューターの前にいません。したがって、自己責任で使用してください。
  • 決定する必要があるのは、データをバイトまたは文字として読み取るかどうかです。
  • この例では、ANSI テキスト ファイルを読んでいることを前提としています。
  • この例では、それほど大きくないファイルを読み取っていることを前提としています。ファイルが大きい場合は、ブロックで読み取る必要があります。
  • エラーハンドラーは、エラーを管理する方法の単なる例です
  • 詳細については、Delphi ヘルプ ドキュメントで TFileStream(および関連クラス)の使用法を確認してください。
于 2013-07-13T00:32:32.793 に答える