4

我正在测试 Delphi 2010,我犯了以下错误:
我是否输入了这个字符链“096 - Construção Ltda”,我是否只将她/它移动到另一个变量并看看他/它留下了什么“096 - Construção Ltda”,有人知道如何找出吗?

入口基地

001 Alcides João Pereira
002 Alvir Maçaneiro
003 Auto Elétrica Imamura Ltda
004 Auto Peças Araújo
005 Auto Peças Porto Eixo Ltda
006 Auto Peças União
007 Azambuja Industria Comercio de Materiais de Construção Ltda
008 Balaroti Comercio De Materiais De Construção Ltda
Transport 009 Ltd
010 Battistella Veículos Pesados Ltda
011 Berton Diesel Auto Peças
012 Bisolo Materiais de Construçã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 - Alvir Maçaneiro
003 - Auto Elétrica Imamura Ltda
004 - Auto Peças Araújo
005 - Auto Peças Porto Eixo Ltda
006 - Auto Peças União
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 - Berton Diesel Auto Peças 012 - Bisolo Materiais de建设有限公司

4

1 回答 1

4

不要使用分配文件。这是一个遗留代码,它不适用于 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)和 ansistring。实际上,它可以读取您拥有的所有类型的文本文件。

于 2011-03-17T02:59:03.830 回答