Problema ao Carregar Arquivo Txt em Variável (Caracteres Especiais)

15/01/2024

0

Olá pessoal,

Estou usando o seguinte código para carregar o conteúdo de um arquivo:

procedure TFrmMain.CarregarConteudo;
var
  varString: string;
  StringList: TStringList;
begin

  StringList := TStringList.Create;

  try
    // Carrega Conteúdo
    StringList.LoadFromFile(ArquivoTexto);   // Carrega o arquivo
    varString := StringList.Text;   // Transfere o arquivo carregado na StringList na variável varString;
    FrmEditor.MmTexto.Lines.Text := varString;   // Carrega o conteúdo da variável no Editor

  finally
    FreeAndNil(StringList);
  end;
end;


A princípio o código carrega normalmente o arquivo (com acentos, Enter e caracteres especiais):

Títulos (Português)
Tìtulo 01
Tìtulo 02
Tìtulo 03
Tìtulo 04
Tìtulo 05ᄈᆵ


O código parece estar correto, porém ao final do arquivo aparece 2 caracteres especiais (que não aparecem se editar o mesmo arquivo no Bloco de Notas).
Preciso carregar o arquivo .txt na variável, pois irei manipular esses dados depois.

O que pode estar acontecendo de errado?
Lucas Bernieri

Lucas Bernieri

Responder

Post mais votado

15/01/2024

Você consegue identificar o código ASCII destes caracteres, para termos uma ideia?

Um arquivo texto convencional contém separadores de linha, que podem ser distintos para o Windows e outros sistemas.

No Linux e sistemas semelhantes (não Windows), as linhas são separadas por um caractere #10 (Line Feed).
No Windows, o separador de linhas é composto de 2 caracteres: #13 (Carriage Return) e #10 (Line Feed).

Ao final do arquivo, pode ser acrescido um caractere extra #26 (End of File), embora não obrigatório.

Também existe a possibilidade de que o arquivo que você está lendo não seja um arquivo do tipo texto puro, podendo conter outros caracteres de controle.

A leitura de arquivos pressupõe o conhecimento de seu formato.

Se você afirma que existem dois caracteres especiais no final do arquivo, pode tentar descobrir quais são, para entender o que está acontecendo.

  ShowMessage(IntToStr(Ord(varString[Length(varString)-1]))+' - '+IntToStr(Ord(varString[Length(varString)])));

Arthur Heinrich

Arthur Heinrich
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar