Extrair dados arquivo texto

Delphi

06/10/2010

Estou iniciando em delphi e preciso desenvolver um programa com conceito simples...preciso importar um arquivo texto e retirar algumas partes dele, e salvar numa pasta no ftp... mais ou menos assim   ------------------------------------------------------------------------------------------------------------------------------------
empresa......                                     DEMONSTRATIVO De PAGAMENTO                                             Folha:       5
empresa ........
------------------------------------------------------------------------------------------------------------------------------------ Unidade Fornecedor:  111                                                                                     Unidade:  1111 Codigo:  00011111 fulano de tal tal                                                                   Fornecedor:  000011111
                                                                       Proced
Tipo Movto   Eve Descricao                      Gr Descricao           Insumo Descricao                         Qtde           Valor
------------ --- ------------------------------ -- ----------------- -------- ------------------------------ ------- ---------------
Impostos      12 INSS                           00 Generico          00000000 Generico                             1           29,40
Impostos      12 INSS                           00 Generico          00000000 Generico                             1           29,40
Impostos      12 INSS                           00 Generico          00000000 Generico                             1           29,40
                                                                                      Valor IRRF:         0,00          Base IRRF:        155,40  Deducao Dependentes:          0,00
         Valor INSS:        29,40    Base INSS JUR:         84,00        Base INSS BEN:          0,00    Base INSS FIS: 100,80
           Valor ISS:         0,00      Base ISS Proc:          0,00         Base ISS Ins:          0,00   Base ISS Extra:    0,00
Vl Imposto Unico:         0,00   Base Imp Unico:          0,00   Base Imp Unico Ins:          0,00
     Valor COFINS:         0,00       Base COFINS:          0,00      Base COFINS Ins:          0,00
 Valor PIS/PASEP:         0,00   Base PIS/PASEP:          0,00         Base PIS Ins:          0,00
         Valor CSLL:         0,00          Base CSLL:          0,00        Base CSLL Ins:          0,00
   Valor Desconto:        25,00       Valor Glosas:          0,00       Valor Producao:        184,80
         Valor Extra:         0,00          Valor Bruto:        184,80        Valor Liquido:        130,40        
-----------------------------------------------------------------------------------------------------------------------------------   eu preciso pegar para cada Codigo ex.: 00011111 fulano de tal tal... extrair o relatorio dele, salvar com um nome.txt e depois enviar via ftp para uma pasta que contem o codigo dele   Não sei bem se deu para entender, mais basicamente é isso, preciso extrair um relatorio de acordo com o codigo dele, e depois salvar numa pasta do ftp cujo nome é o codigo dele. porem esse relatorio contem varios fornecedores.    
Junior

Junior

Curtidas 0

Respostas

Wesley Batista

Wesley Batista

06/10/2010

Olá meu caro,

Uma dúvida este relatório tem sempre este layout ?
Quando você diz extrair o " relatório dele ", você quer extrair quais informações ?
Sabe enviar via FTP ?

Temos 3 problemas para resolver, Layout, extração, e envio.

O mais importante é entender o layout do relatório, tem que saber o layout, padrão, posições isso é extremamente importante, você sabe o padrão ? Sabe quais são as linhas e colunas que você deve copiar ? No seu exemplo você tem :

1------------------------------------------------------------------------------------------------------------------------------------
2empresa......                                     DEMONSTRATIVO De PAGAMENTO                                             Folha:       5
3empresa ........
4------------------------------------------------------------------------------------------------------------------------------------
5Unidade Fornecedor:  111                                                                                     Unidade:  1111
6Codigo:  00011111 fulano de tal tal                                                                   Fornecedor:  000011111

Na linha 6, posição 9(por exemplo) começa o código do seu cliente, isso é padrão ?
Sendo assim você poderia pegar ele usando o copy, conhece esta função ?

vamos trocando uma ideia para amadurecermos os pensamentos.

Um abraço

Wesley Batista
GOSTEI 0
Junior

Junior

06/10/2010

Obrigado pela atenção Wesley..

Vamos lá..

1o Esse relatório é um layout padrão sim, ele sempre gera dessa forma, porem tenho de todos fornecedores em um arquivo só, então vem segundo problema..

2o eu quero separar os fornecedores desse relatorio em um arquivo para cada fornecedor(no caso copiar todo o demonstrativo do fornecedor e não só alguns campos),pois isso hj é feito manual, são muitos fornecedores isso demora muito pra separa-los no "braço". Ai quando eu enviar para o ftp, o sistema do site buscara esse relatorio e vai gerar um pdf, para ficar disponivel online para os fornecedores.

3o No caso do envio para o ftp acho que é o de menos pesquisei um pouco e não me pareceu dificil.



Acho que seria com essa função copy mesmo, porem não sei como delimitar onde ele começa e onde termina o que eu devo copiar.



GOSTEI 0
Anderson

Anderson

06/10/2010

Tenta algo assim:

var
  vt_Origem,vt_destino:TStringList;
  in_in,in_fi:integer;
  bo_copiar:boolean;
  sc_fornecedor:string;

begin
    vt_Origem:=TStringList.Create;
    vt_Destino:=TStringList.Create;
    vt_Origem.LoadFromFile('nomedoarquivodetexto.txt');
    in_in:=0;
    in_fi:=vt_Origem.Count-1;
   
    while in_in<in_fi do
          begin
            if leftstr(vt_Origem[in_in],19)='Unidade Fornecedor:' then
               bo_copiar:=True;

            if bo_copiar=True then
               vt_Destino.Add(vt_Origem[in_in]);

            if (pos('Codigo:',vt_Origem[in_in])>0) and
               (pos(' Fornecedor:',vt_Origem[in_in])>0) then
               sc_fornecedor:=copy(vt_Origem[in_in],AquiNroPosiciaoInicialCodigoFornecedor,TamanhoCodigoFornecedor)+'.txt';

            if pos('Valor Liquido:',vt_Origem[in_in])>0 then
               begin
                 vt_Destino.SaveToFile(sc_fornecedor);
                 vt_Destino.Clear;
                 bo_copiar:=False;
            end;

            in_in:=in_in+1;

     end;

     FreeAndNil(vt_Origem);
     FreeAndNil(vt_Destino);

end;
 

Atenção: Só fui escrevendo o código, não testei (com certeza deve ter uns bugs, mas já aponta para uma possível solução).


Abraços,

Anderson:.
GOSTEI 0
POSTAR