dos要素を含むテキストファイルがあります-たとえば、hex(00)。私はそれを読んで変換する必要があります。を使用しようとしましutf8toansi
たが、これによりhex(00)で行全体が削除されます。ファイル全体のテキストに変換する方法はありますか?私は、、を使用してwin32
いRadStudio2007
ますDelphi
。
質問する
2461 次
3 に答える
4
これでいいはず...
procedure ConvertFileToDos(const aInFile,aOutFile:String);
var
FileIn,FileOut:TextFile;
C:AnsiChar;
LineBreak:String;
begin
LineBreak := #13#10;
AssignFile(FileIn,aInFile);
Reset(FileIn);
AssignFile(FileOut,aOutFile);
ReWrite(FileOut);
while not EOF(FileIn) do
begin
Read(FileIn,C);
if C=#0 then
Write(FileOut,LineBreak)
else
Write(FileOut,C)
end;
CloseFile(FileIn);
CloseFile(FileOut);
end;
于 2008-12-23T02:51:53.670 に答える
2
それを TMemoryStream に読み込み、PChar を最初のアドレスに割り当て、0 から Size - 1 までのループでスキャンすることができます。もちろん、埋め込まれた #0 文字をどうするかはあなた次第です。#13 は無視して、遭遇した #10 ごとに文字列を追加してください。
編集:
何かのようなもの:
procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TStream;
MemStream: TMemoryStream;
P: PChar;
s: string;
i: integer;
begin
FileStream := TFileStream.Create('file.txt', fmOpenRead);
try
MemStream := TMemoryStream.Create;
try
MemStream.LoadFromStream(FileStream);
P := PChar(MemStream.Memory);
s := '';
for i := 0 to MemStream.Size - 1 do begin
case P[0] of
#0: {};
#10: begin
// do something with s
s := '';
end;
#13: {};
else
s := s + P[0];
end;
Inc(P);
end;
finally
MemStream.Free;
end;
finally
FileStream.Free;
end;
end;
于 2008-12-22T16:23:06.403 に答える
0
Delphiはわかりませんが、おそらくテキストファイルではなくバイナリファイルとしてファイルを開く必要があると思います。次に、バイトを直接読み取り、必要なものに変換できます。
于 2008-12-22T17:02:39.820 に答える