leitura de arquivo texto s/ delimitador

09/05/2008

1

Boa tarde a todos

Tenho um arquivo texto que é gerado para um programa Folha de Pagamento, e preciso ler esse arquivo no Delphi, porém esse arquivo não tem delimitador nenhum para final de linha. Espero que vcs possam me ajudar
Exemplo do arquivo que preciso ler
+00144106050800000000010393
+00144106050801000000010363
+00144106050802000000010393
+00144106050803000000010363
+00144206050804000000010393
+00144206050805000000010363
+00144206050806000000010363
+00144206050807000000010393 


Quero jogar esses dados (separados) em uma StringGrid, até aí eu consegui ler e gravar no StringGrid (usando Copy), mas sempre está retornando a mesma linha (a primeira)


Responder

Posts

09/05/2008

Joaoshi

Colega, talves ajude

A ideia é pegar o conteudo do arquivo texto e jogar no Memo, e ir lendo cada linha do Memo.

procedure TForm1.Button1Click(Sender: TObject);
var nLinha : Integer;
    SuaVariavel1, SuaVariavel2 : String;
     
begin
  Memo1.Lines.Clear;
  Memo1.Lines.LoadFromFile(´CaminhoDoArquivo.Texto´);
  For nLinha := 0 to Memo1.Lines.Count -1 do
    begin
      SuaVariavel1 := Copy(Memo1.Lines[nLinha],1,5);
      SuaVariavel2 := Copy(Memo1.Lines[nLinha],6,3);
    end;
  ShowMessage(´Acabou´);
end;


Espero ter ajudado.


Responder

09/05/2008

Facc

amigo, valeu pela dica, mas carregar no memo eu consegui...

o que quero é pegar akele arquivo e jogar numa stringgrid para tratar os dados, já identifiquei todos os campos e consegui fazer a quebra (fiz um For) mas só retorna a 1ª linha do arquivo.


Responder

10/05/2008

Joaoshi

Colega, neste caso (uma grande linha sem delimitador), você deve saber o tamanho de um ´registro ´ por exemplo:

+00144106050800000000010393 tem 27 caracteres

Fazer um for lendo a até o fim da string de 27 em 27 caracteres, e cada conjunto de 27 caracteres você pega os dados individuais.

Espero ter ajudado.


Responder

12/05/2008

Facc

Bom dia

Consegui resolver por parte...

  Memo1.Lines.Clear;
  Memo1.Lines.LoadFromFile(´C:\FolhaPgto\DADOS.TXT´);
  i := 0;
  sgrid.RowCount := Memo1.Lines.Count;
  while i <> Memo1.Lines.Count do
  begin
    if Copy(Memo1.Lines[i], 1, 3) = ´+00´ then
    begin
      sgrid.Cells[0, i] := ´E´
    end
    else
    begin
      sgrid.Cells[0, i] := ´S´
    end;
    sgrid.Cells[1, i+1] := Copy(Memo1.Lines[i], 4, 4);
    sgrid.Cells[2, i+1] := Copy(Memo1.Lines[i], 8, 6);
    sgrid.Cells[3, i+1] := Copy(Memo1.Lines[i], 14, 2);
    sgrid.Cells[4, i+1] := Copy(Memo1.Lines[i], 16, 12);
    Inc(i);
    Application.ProcessMessages;
  end;


Com essa função consegui pegar linha a linha como precisava, porém qndo jogo na StringGrid ela fica toda branca, sem dado nenhum dentro... Porém a contagem da linha tá real. Como resolvo isso?


Responder