Importar arquivo *.txt

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ctavares
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 20 Jan 2010 16:28
Localização: sorocaba-sp

Importar arquivo *.txt

Mensagem por ctavares »

Olá, boa tarde.
Estou precisando importar um arquivo txt que tem o layout que pode ser visto logo abaixo, preciso que o cliper entenda que cada campo está separado por ; é possível fazer isso? Eu já encontrei exemplos de código que mostra como importar por numero de coluna fixo mas não separado por ; como é o caso do meu *.txt

arquivo.txt
codigo/bruto/liquido/venda
1/901-13;4.41;3.31;8.27
1/901-16;4.41;3.31;8.27
1/908-01;4.48;3.36;8.40
1/918-22;4.98;3.74;9.34
1/918-24;4.98;3.74;9.34
1/918-25;4.98;3.74;9.34
1/918-36;4.98;3.74;9.34
1/918-38;4.98;3.74;9.34
1/919-01;5.55;4.16;10.41

Muito Obrigado.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Importar arquivo *.txt

Mensagem por Toledo »

Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
leandromiler
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 26 Nov 2009 08:38
Localização: Ribeirão Preto - SP
Contato:

Re: Importar arquivo *.txt

Mensagem por leandromiler »

Segue rotina que usei para importar um arquivo parecido com este.

Código: Selecionar todos


 clear
 USE CIDADE ALIAS CIDADE NEW
 ZAP

 USE importa ALIAS importa NEW
 GO TOP
 CONTA=0
DO WHILE .T.
   CLEAR
   do while !EOF()
      mLINHA:=importa->LINHA

      mCEP=' '
      mCEP=SUBSTR(mLINHA,1,8)

      mCIDADE=' '
      X=10
      DO WHILE SUBSTR(mLINHA,X,1)<>';'   // CEP
          IF x=10
            mCIDADE=SUBSTR(mLINHA,X,1)
          ELSE
            mCIDADE=mCIDADE+SUBSTR(mLINHA,X,1)
          ENDIF
          X++
      ENDDO

      mUF=' '
      X++ // PULA PONTO E VIRGULA
      mUF=SUBSTR(mLINHA,X,2)
      X:=X+2


      mBAIRRO=' '
      X++ // PULA PONTO E VIRGULA
      DO WHILE SUBSTR(mLINHA,X,1)<>';'   // CEP
          IF EMPTY(mBAIRRO)
            mBAIRRO=SUBSTR(mLINHA,X,1)
          ELSE
            mBAIRRO=mBAIRRO+SUBSTR(mLINHA,X,1)
          ENDIF
          X++
      ENDDO

      mENDE=' '
      X++ // PULA PONTO E VIRGULA
      DO WHILE SUBSTR(mLINHA,X,1)<>';'   // CEP
          IF EMPTY(mENDE)
            mENDE=SUBSTR(mLINHA,X,1)
          ELSE
            mENDE=mENDE+SUBSTR(mLINHA,X,1)
          ENDIF
          X++
      ENDDO


      CONTA++
      @ 05,60 SAY CONTA PICT '9999999'

      SELE CIDADE
      APPE BLANK
      REPLACE CEP       WITH mCEP
      REPLACE CIDADE    WITH UPPER(mCIDADE)
      REPLACE UF        WITH UPPER(mUF)
      REPLACE BAIRRO    WITH UPPER(mBAIRRO)
      REPLACE ENDERECO  WITH UPPER(mENDE)

//      @ 22,20 say mCEP
//      @ 23,20 say mENDE
//      @ 24,20 say mCIDADE+' '+MUF

      SELE importa
      SKIP
      IF EOF()
        EXIT
      ENDIF
   ENDDO
   IF EOF()
     EXIT
   ENDIF
 ENDDO

Clipper 5.3b / CDX Nativo / Blinker 7

Ninguem sabe tanto que não possa aprender, e nem sabe tão pouco que não possa ensinar !!!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Importar arquivo *.txt

Mensagem por alxsts »

Olá!

Seja bem-vindo ao fórum!

Você precisará criar a tabela .DBF onde os dados serão armazenados e depois popular com os dados do arquivo texto .

Exemplo:

Código: Selecionar todos

   // cria tabela vazia conforme layout apresentado
   DbCreate( "Arquivo",  ;
                   { { "codigo",  "C", 8, 0 }, ;
                     { "bruto",   "N", 8, 2 }, ;
                     { "liquido", "N", 8, 2 }, ;
                     { "venda",   "N", 8, 2 }  ;
                   };
                )

   // abre tabela vazia criada acima (Arquivo.DBF)
   USE "Arquivo" EXCLUSIVE NEW

   IF ! NetErr()
     // se abriu a tabela vazia, importa os dados (Arquivo.TXT)
     APPEND FROM "Arquivo.TXT" DELIMITED WITH ";"
   Else
     Alert( "Falha na abertura do arquivo destino.;" + "Erro DOS " + LTrim( Str( FError() ) )
   Endif

   // Fecha tabela
   Arquivo->( DbCloseArea() )
[]´s
Alexandre Santos (AlxSts)
Responder