Alberto Mota Postado Janeiro 5, 2010 Denunciar Share Postado Janeiro 5, 2010 Eu já sabia que fazer tratamento ao arquivo retorno seria trabalhoso,e mais agora que recebi esse arquivo da Caixa. Para o meu sistema só me interessa o Segmento T, por isso só preciso dessa faixa.O exemplo abaixo é um resumo:10400011T01 030 2009398459000160198008 1040001300001T 0600222400300000263380D0 1040001300002U 060000000000000000000000 10400015 0000020000000000000000 10499999 000001000006000000000Gostaria de apenas capturar a faixa da segunda linha, onde o 14º digito o identifica.se na 14ª posição não for T, não lê o arquivo. Agradeço de antemão a ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 5, 2010 Denunciar Share Postado Janeiro 5, 2010 O exemplo abaixo é um resumo:10400011T01 030 2009398459000160198008 1040001300001T 0600222400300000263380D0 1040001300002U 060000000000000000000000 10400015 0000020000000000000000 10499999 000001000006000000000Gostaria de apenas capturar a faixa da segunda linha, onde o 14º digito o identifica.se na 14ª posição não for T, não lê o arquivo.Alberto Mota ... isso é muito simplesSe esse resumo estiver dentro de um memo, ficaria assim:procedure TForm1.Button1Click(Sender: TObject); var i : integer; linha : string; begin for i := 0 to Memo1.Lines.Count do begin linha := Memo1.Lines.Strings[i]; if pos('T',linha) = 14 then showmessage(linha); end; end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alberto Mota Postado Janeiro 6, 2010 Autor Denunciar Share Postado Janeiro 6, 2010 Jhonas, o arquivo está num arquivo texto, na verdade um arquivo .reto que resulta no mesmo. Como seria nesse arquivo?Mais uma vez, obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 6, 2010 Denunciar Share Postado Janeiro 6, 2010 Jhonas, o arquivo está num arquivo texto, na verdade um arquivo .reto que resulta no mesmo. Como seria nesse arquivo?Mais uma vez, obrigado.ficaria dessa maneira:procedure TForm1.Button1Click(Sender: TObject); var Arquivo : Textfile; Linha : string; begin AssignFile(Arquivo, 'C:\Retorno.ret'); Reset(Arquivo); while not EOF(Arquivo) do begin ReadLn(Arquivo, Linha); if pos('T',linha) = 14 then showmessage(linha); end; CloseFile(Arquivo); end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alberto Mota Postado Janeiro 6, 2010 Autor Denunciar Share Postado Janeiro 6, 2010 Jhonas, implantei o seu código e atendeu perfeitamente.Vou adequar ao objetivo final e assim que concluir posto o resultado.Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alberto Mota Postado Janeiro 6, 2010 Autor Denunciar Share Postado Janeiro 6, 2010 Para quem precisar, o código abaixo, graças ao Jhonas,Lê um arquivo texto e adiciona na tabela com a condição de apenas os que estiverem na 14ª posição.varfArq: TextFile;Caminho: string;Linha: string;mTexto: TStringList;i: integer;valor1, valor2 : string;somatotal : Real;somatotal2 : String;dat :string;data :TDate;Valor : real;numero : integer;beginAdoQuery1.open;if Edit1.Text = '' thenBeginstatusbar1.Panels[0].Text := ' Selecione o arquivo retorno!';BitBtn4.setfocus;exit;End;Caminho := Edit1.Text;AssignFile(fArq, Caminho);ReSet(fArq);mTexto := TStringList.Create;trymTexto.LoadFromFile(Caminho);pb.Max := mTexto.Count - 1;i := 0;finallymTexto.Free;end;while not Eof(fArq) dobeginReadln(farq, linha);Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(pb.Max);if pos('T',linha) = 14 thenBegindat := copy(linha,15,8);insert('/',dat,3);insert('/',dat,6);data := strtodate(dat);valor := (strtofloat(copy(linha,22,10))/100);numero := strtoint(copy(linha,4,10));AdoQuery1.ExecSQL;AdoQuery1.Append;Adoquery1.edit;ADOQuery1.FieldbyName('banco').Value := Trim(Copy(Linha, 1, 3));ADOQuery1.FieldbyName('numerodoc').Value := numero;ADOQuery1.FieldbyName('dt').Value := datetostr(data);ADOQuery1.FieldbyName('vr').Value := valor;ADOQuery1.Post;AdoQuery1.ExecSQL;Inc(i);pb.Position := pb.Position + 1;Application.ProcessMessages;Next;pb.Visible := false;Label1.Caption := 'Total de registros importados: '+ IntToStr(AdoQuery1.Recordcount);soma;end;end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Alberto Mota
Eu já sabia que fazer tratamento ao arquivo retorno seria trabalhoso,
e mais agora que recebi esse arquivo da Caixa.
Para o meu sistema só me interessa o Segmento T, por isso só preciso dessa faixa.
O exemplo abaixo é um resumo:
10400011T01 030 2009398459000160198008
1040001300001T 0600222400300000263380D0
1040001300002U 060000000000000000000000
10400015 0000020000000000000000
10499999 000001000006000000000
Gostaria de apenas capturar a faixa da segunda linha, onde o 14º digito o identifica.
se na 14ª posição não for T, não lê o arquivo.
Agradeço de antemão a ajuda.
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.