gpt4 book ai didi

delphi - 打开备忘录中的任何文件?

转载 作者:行者123 更新时间:2023-12-03 14:46:54 26 4
gpt4 key购买 nike

在记事本中,您可以打开任何文件,它将显示其中的原始数据。

我想在 TMemo 中执行此操作,但一直在努力找出如何执行此操作。

我设法找到了这个code here.

我将其修改为一个函数,并根据我的目的对其进行了轻微更改:

function OpenBinaryFile(var Data; Count: Cardinal): string;
var
Line: string[80];
i: Cardinal;
P: PAnsiChar;
nStr: string[4];
SL: TStringList;
const
posStart = 1;
binStart = 7;
ascStart = 57;
begin
P := @Data;
Line := '';

SL := TStringList.Create;
try
for i := 0 to Count - 1 do
begin
if (i mod 16) = 0 then
begin
if Length(Line) > 0 then
SL.Add(Trim(Line));

FillChar(Line, SizeOf(Line), ' ');
Line[0] := Chr(72);
end;

if P[i] >= ' ' then
Line[i mod 16 + ascStart] := P[i]
else
Line[i mod 16 + ascStart] := '.';
end;

SL.Add(Trim(Line));

Result := SL.Text;
finally
SL.Free;
end;
end;

它可以工作,但每行仅显示固定数量的字符,如下所示:

enter image description here

我需要更改什么才能使其像记事本一样填充所有备忘录?

最佳答案

嗯,正是 if (i mod 16) = 0 测试将行截断为 16 个字符。

我相信记事本的作用与此代码相同:

var
i: Integer;
s: AnsiString;
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
SetLength(s, Stream.Size);
if Stream.Size>0 then
Stream.ReadBuffer(s[1], Stream.Size);
finally
Stream.Free;
end;
for i := 1 to Length(s) do
if s[i]=#0 then
s[i] := ' ';
Memo1.Text := s;
end;

如果您想用 '.' 替换不可打印的字符,那么您可以通过修改上面的代码来轻松实现,如下所示:

if s[i]<#32 then
s[i] := '.';

关于delphi - 打开备忘录中的任何文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com