ler um arquivo txt DELPHI

11/07/2019

11

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.
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;
Responder

Mais Posts

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