gpt4 book ai didi

delphi - Delphi 2010 中的编码错误

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

我正在测试 Delphi 2010,但出现以下错误:
我是否输入这串字符“096 - Construção Ltda”,我是否只将她/它移动到另一个变量,并查看他/它离开“096 - Construção Ltda”的内容,有人知道如何发现那个???

入口底座

001 阿尔西德斯·若昂·佩雷拉
002 阿尔维尔·马萨内罗
003 汽车电气今村有限公司
004 汽车佩萨斯阿劳霍
005 Auto Peças Porto Eixo 有限公司
006 汽车佩萨斯联盟
007 Azambuja Industria Comercio de Materiais de Contrução Ltda
008 巴拉罗蒂商业 Material 建筑有限公司
009 Baldissera Logística e Transportes Ltda Me
010 巴蒂斯特拉·韦伊库洛斯·佩萨多斯有限公司
011 伯顿柴油汽车佩萨斯
012 Bisolo Materiais de Contrução Ltda

procedure TForm1.Button2Click(Sender: TObject);
var
tfEntrada : TextFile;
intI, intJ : Integer;
strA, strS : String;

procedure lerUm; //To read a registration of the file text
begin
inc( intI );
ReadLn( tfEntrada, strS );

strA := Copy( IntToStr( intI + 1000 ), 2, 3 ) + ' - ';
Edit1.Text := strS;

end;

begin

intI := 0;
AssignFile( tfEntrada, 'nomes_tst_0001.txt' );
Reset( tfEntrada );

lerUm;

while not Eof ( tfEntrada ) do
begin

mmEntrada.Lines.Add( strA + strS ); //I move for TMemo(mmEntrada, mmSaida), in the form

mmSaida.Lines.Add( strA + strS );

lerUm;

end;

CloseFile( tfEntrada );

end;

结果库

001 - Alcides João Pereira
002 - 阿尔维尔·马桑内罗
003 - Auto Elétrica Imamura Ltda
004 - 汽车佩萨斯阿拉霍
005 - Auto Peças Porto Eixo Ltda
006 - 汽车佩萨斯统一
007 - Azambuja Industria Comercio de Materiais de Construção Ltda
008 - Balaroti Comercio De Materiais De Construção Ltda
009 - Baldissera Logística e Transportes Ltda Me
010 - Battistella Veículos Pesados Ltda
011 - 伯顿柴油汽车佩拉斯012 - Bisolo Materiais de Construção Ltda

最佳答案

不要使用AssignFile。它是一个遗留代码,不能与 UnicodeStrings 一起使用。相反,请使用 TStringList 或 TFileStream 来读取文件。

[未经测试]

procedure ReadFile;  
var
vFileReader : TstringList;
begin
vFileReader := TStringList.Create;
try
vFileReader.LoadFromFile('nomes_tst_0001.txt');
mmEntrada.Lines.Assign(vFileReader);
finally
vFileReader.Free;
end;
end;

已编辑

另一个不错的解决方案是我很久以前编写的以下函数:

[已测试]

function GetFileAsString(aFileName: string; aOffSet : Integer = 0; aChunkSize: Integer = -1): string;
var
vStream: TFileStream;
vBuffer: TBytes;
vCurEncoding, vDefEncoding: TEncoding;
vOffSet: Integer;
vFileSize: Int64;
begin
vCurEncoding := nil;
vDefEncoding := TEncoding.Default;
vStream := TFileStream.Create(aFileName, fmOpenRead + fmShareDenyNone);
try
if aChunkSize > 0 then begin
vFileSize := aChunkSize;
end
else begin
vFileSize := vStream.Size;
end;
vStream.Position := aOffSet;
SetLength(vBuffer, vFileSize);
vStream.ReadBuffer(Pointer(vBuffer)^, vFileSize);
vOffSet := TEncoding.GetBufferEncoding(vBuffer, vCurEncoding);
if (vCurEncoding <> vDefEncoding) then begin
vBuffer := TEncoding.Convert(vCurEncoding, vDefEncoding, vBuffer, vOffSet, vFileSize - vOffSet);
end;
Result := vDefEncoding.GetString(vBuffer);
finally
vStream.Free;
end;
end;

该函数能够处理 unicode 字符串(带 BOM)和 ansisstring。实际上,它可以读取您拥有的所有类型的文本文件。

关于delphi - Delphi 2010 中的编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662628/

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