我有一个带dos元素的文本文件 - 例如hex(00)。我需要阅读并转换它。我曾尝试使用utf8toansi
,但这会删除整个行(十六进制(00))。有没有办法在整个文件中转换为文本?
我使用的是win32
,RadStudio2007
,Delphi
。
答案 0 :(得分: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;
答案 1 :(得分:2)
您可以将其读入TMemoryStream,将PChar分配给第一个地址,然后使用从0到大小的循环进行扫描 - 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;
答案 2 :(得分:0)
我不知道Delphi,但我猜你可能需要打开文件作为二进制文件而不是文本文件。然后你可以直接读取字节并将它们转换成你想要的任何字符。