ler um arquivo txt DELPHI

11/07/2019

0

Gostaria de LER um arquivo txt que contém uma matriz 3x3 e jogar o conteúdo em um stringGrid, alguém poderia me ajudar, eu não tenho muito conhecimento em delphi, li alguns posts, consultei alguns arquivos, mas não encontrei nada relacionado a matrizes.
Maria Taisa

Maria Taisa

Responder

Post mais votado

11/07/2019

Boa tarde!

Você pode usar a classe TStringList, que contém um método chamado LoadFromFile (só passar o caminho do arquivo), ele vai te retornar uma lista com todas as linhas desse arquivo, depois como você disse o ESPAÇO EM BRANCO está presentes em cada número da sua matriz, você usa a função SPLIT (que nada mais SEPARA a linha a cada ESPAÇO, transformando em um Array<String>), depois só percorrer o array que sobrou e adicionar no seu StringGrid.
Abaixo está o código que pode ajudar:

P.S: Não cheguei a testar complemente o código com um arquivo de texto e tals, mas a sintaxe ta correta.

procedure OpenAndReadFile(const AFilePath: UnicodeString);
var
   Loop: Integer;
   StringList: TStringList;
   ArrayStr: TArray<String>;
   I: Integer;
begin
   StringList := TStringList.Create;
   try
      StringList.LoadFromFile(AFilePath);

      for Loop := 0 to StringList.Count - 1 do
      begin
         ArrayStr := StringList[Loop].Split([' ']);

         for I := Low(ArrayStr) to High(ArrayStr) do
         begin
            StringGrid.Cell[Loop, I] := ArrayStr[I];
         end;
      end;
   finally
      FreeAndNil(StringList);
   end;

Rafael Bosco

Rafael Bosco
Responder

Mais Posts

11/07/2019

Emerson Nascimento

apresente ao menos uma parte do conteúdo do arquivo, e diga o que e como você espera que seja o resultado da extração de dados.
Responder

11/07/2019

Maria Taisa

apresente ao menos uma parte do conteúdo do arquivo, e diga o que e como você espera que seja o resultado da extração de dados.



o arquivo vai conter uma matriz como essa por exemplo

2 2 2
0 1 2
3 1 0

eu não irei alterar o arquivo, será somente leitura, no caso eu queria saber como fazer para colocar
cada caractere que tem no arquivo no stringGrind.cell[j,i] := string; e como ignorar os espaços em branco.

o resultado que quero é a matriz do arquivo preencher o stringGrind.

Desde já agradeço.
Responder

11/07/2019

Maria Taisa

a extração de dados será somente os elementos numéricos da matriz que tem no arquivo txt .
Responder

12/07/2019

Maria Taisa

Boa tarde!

Você pode usar a classe TStringList, que contém um método chamado LoadFromFile (só passar o caminho do arquivo), ele vai te retornar uma lista com todas as linhas desse arquivo, depois como você disse o ESPAÇO EM BRANCO está presentes em cada número da sua matriz, você usa a função SPLIT (que nada mais SEPARA a linha a cada ESPAÇO, transformando em um Array<String>), depois só percorrer o array que sobrou e adicionar no seu StringGrid.
Abaixo está o código que pode ajudar:

P.S: Não cheguei a testar complemente o código com um arquivo de texto e tals, mas a sintaxe ta correta.

procedure OpenAndReadFile(const AFilePath: UnicodeString);
var
   Loop: Integer;
   StringList: TStringList;
   ArrayStr: TArray<String>;
   I: Integer;
begin
   StringList := TStringList.Create;
   try
      StringList.LoadFromFile(AFilePath);

      for Loop := 0 to StringList.Count - 1 do
      begin
         ArrayStr := StringList[Loop].Split([' ']);

         for I := Low(ArrayStr) to High(ArrayStr) do
         begin
            StringGrid.Cell[Loop, I] := ArrayStr[I];
         end;
      end;
   finally
      FreeAndNil(StringList);
   end;



Muito Obrigada Rafael, deu certo.
Responder

12/07/2019

Maria Taisa

Boa tarde!

Você pode usar a classe TStringList, que contém um método chamado LoadFromFile (só passar o caminho do arquivo), ele vai te retornar uma lista com todas as linhas desse arquivo, depois como você disse o ESPAÇO EM BRANCO está presentes em cada número da sua matriz, você usa a função SPLIT (que nada mais SEPARA a linha a cada ESPAÇO, transformando em um Array<String>), depois só percorrer o array que sobrou e adicionar no seu StringGrid.
Abaixo está o código que pode ajudar:

P.S: Não cheguei a testar complemente o código com um arquivo de texto e tals, mas a sintaxe ta correta.

procedure OpenAndReadFile(const AFilePath: UnicodeString);
var
   Loop: Integer;
   StringList: TStringList;
   ArrayStr: TArray<String>;
   I: Integer;
begin
   StringList := TStringList.Create;
   try
      StringList.LoadFromFile(AFilePath);

      for Loop := 0 to StringList.Count - 1 do
      begin
         ArrayStr := StringList[Loop].Split([' ']);

         for I := Low(ArrayStr) to High(ArrayStr) do
         begin
            StringGrid.Cell[Loop, I] := ArrayStr[I];
         end;
      end;
   finally
      FreeAndNil(StringList);
   end;

Muito Obrigada Rafael, deu certo.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar