IMPORTAÇÃO ARQUIVO - APPEND

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

isac.santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 17 Jun 2024 17:01
Localização: São Paulo

IMPORTAÇÃO ARQUIVO - APPEND

Mensagem por isac.santos »

Amigos Clipeiros poderiam me ajudar por favor, preciso fazer uma importação (Append) de arquivo para um banco de dados, não estou conseguindo acertar o campo númerico, imagino que deve ter algum tipo de tratamento.

Abaixo segue exemplo do arquivo TEXTO (ARQUIVO), que preciso importar para um DBF
XXXXX-CAMPO NUMERICO
Valores 703,68, 558,73, onde é 00000000000000000(17x0) campo númerico valor.

0182370156400775017755540009063 000000000000703685140040905980030003008002037818200606130000000001KFC018 0000000002
0183412627800615901975160003575 000000000000558735140040905980030003008002037818200606130000000002KFC018 0000000003



LOCAL L := 0, C := 0, DATAPRO := "20250901"
if datapro <= dtos(date())
cls
set color to 16/07
@ 09, 31 SAY "isac@hotmail.com"
@ 11, 25 say "ÉÍÍÍÍÍÍÍ[ Mensagem ]ÍÍÍÍÍÍÍ»"
@ 12, 25 say "º º"
@ 13, 25 say "º PROGRAMA NŽO LICENCIADO! º"
@ 14, 25 say "º º"
@ 15, 25 say "ÈÍÍÍ[ Acione uma tecla ]ÍÍͼ"
set color to
quit
ENDIF
PARAM ARQTXT
IF EMPTY(ARQTXT)
?
? "ARQ (NOME DO ARQUIVO)"
?
?
QUIT
ENDIF
IF .NOT. FILE ("DADOS.DBF")
ESTRU:={}
AADD(ESTRU, {"COMP","C",03,0})
AADD(ESTRU, {"BANCO","C",03,0})
AADD(ESTRU, {"AGENCIA","C",04,0})
AADD(ESTRU, {"DV2","C",01,0})
AADD(ESTRU, {"CONTA","C",12,0})
AADD(ESTRU, {"DV1","C",01,0})
AADD(ESTRU, {"CHEQUE","C",06,0})
AADD(ESTRU, {"DV3","C",1,0})
AADD(ESTRU, {"FILLER","C",02,0})
AADD(ESTRU, {"VALOR","N",15,2})
AADD(ESTRU, {"TIP","C",01,0})
AADD(ESTRU, {"TIPO","C",02,0})
AADD(ESTRU, {"FILLER2","C",02,0})
AADD(ESTRU, {"BCOREM","C",03,0})
AADD(ESTRU, {"AGEREM","C",04,0})
AADD(ESTRU, {"AGEDEP","C",04,0})
AADD(ESTRU, {"CONDEP","C",12,0})
AADD(ESTRU, {"COMPAC","C",03,0})
AADD(ESTRU, {"DATA","C",08,0})
AADD(ESTRU, {"LOTE","C",07,0})
AADD(ESTRU, {"SEQLOTE","C",03,0})
AADD(ESTRU, {"CENTRO","C",05,0})
AADD(ESTRU, {"FILLER3","C",46,0})
AADD(ESTRU, {"SEQ","C",10,0})
DBCREATE("DADOS",ESTRU)
ENDIF
USE DADOS
* ZAP
APPEND FROM (ARQTXT) SDF ALL
GO TOP
SET DEVICE TO PRINT
SET PRINT TO (ARQTXT)
DO WHILE DADOS->(!EOF())
@ L,C SAY DADOS->COMP+DADOS->BANCO+DADOS->AGENCIA+DADOS->DV2+DADOS->;
CONTA+DADOS->DV1+DADOS->CHEQUE+DADOS->DV3+DADOS->;
FILLER+DADOS->VALOR+DADOS->TIP+DADOS->TIPO+DADOS->FILLER2+DADOS->;
BCOREM+DADOS->AGEREM+DADOS->AGEDEP+DADOS->CONDEP+DADOS->COMPAC+DADOS->;
DATA+DADOS->LOTE+DADOS->SEQLOTE+DADOS->CENTRO+DADOS->FILLER3+DADOS->SEQ
DADOS->(DBSKIP(1))
L := L+1
@PROW()+1,00 SAY""
ENDDO
SET DEVICE TO SCREEN
SET PRINT OFF
DBCLOSEALL()
* DELETE FILE DADOS.DBF
QUIT


Desde já agradeço, atenção...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

IMPORTAÇÃO ARQUIVO - APPEND

Mensagem por alxsts »

Olá!

Testei aqui... o problema está no mapeamento dos campos do TXT para o DBF. Revise este ponto.

Código: Selecionar todos

FUNCTION Main()

   CLS

   Teste( "ArqTxt.txt")

RETURN NIL

PROCEDURE Teste( ArqTxt )

   LOCAL L := 0, C := 0, DATAPRO := "20250901"

   if datapro <= dtos(date())
      cls
      set color to 16/07
      @ 09, 31 SAY "isac@hotmail.com"
      @ 11, 25 say "ÉÍÍÍÍÍÍÍ[ Mensagem ]ÍÍÍÍÍÍÍ»"
      @ 12, 25 say "º º"
      @ 13, 25 say "º PROGRAMA NŽO LICENCIADO! º"
      @ 14, 25 say "º º"
      @ 15, 25 say "ÈÍÍÍ[ Acione uma tecla ]ÍÍͼ"
      set color to
      quit
   ENDIF

   //PARAM ARQTXT
   set cursor on

   IF EMPTY(ARQTXT)
      ?
      ? "ARQ (NOME DO ARQUIVO)"
      ?
      ?
      QUIT
   ENDIF

   IF .NOT. FILE ("DADOS.DBF")
      ESTRU:={}
      AADD(ESTRU, {"COMP","C",03,0})           // 018
      AADD(ESTRU, {"BANCO","C",03,0})     // 237
      AADD(ESTRU, {"AGENCIA","C",04,0})     // 0156
      AADD(ESTRU, {"DV2","C",01,0})     // 4
      AADD(ESTRU, {"CONTA","C",12,0})     // 007750177555
      AADD(ESTRU, {"DV1","C",01,0})     // 4
      AADD(ESTRU, {"CHEQUE","C",06,0})     // 000906
      AADD(ESTRU, {"DV3","C",1,0})     // 3
      AADD(ESTRU, {"FILLER","C",01,0})     //   ==> " "
      AADD(ESTRU, {"VALOR","N",17,0})     // 00000000000070368  ==> alterei aqui, removendo as casas decimais
      AADD(ESTRU, {"TIP","C",01,0})     // 5
      AADD(ESTRU, {"TIPO","C",02,0})     // 14
      AADD(ESTRU, {"FILLER2","C",01,0})     // 0
      AADD(ESTRU, {"BCOREM","C",03,0})     //  040
      AADD(ESTRU, {"AGEREM","C",04,0})     // 9059
      AADD(ESTRU, {"AGEDEP","C",04,0})     // 8003
      AADD(ESTRU, {"CONDEP","C",12,0})     // 000300800203
      AADD(ESTRU, {"COMPAC","C",03,0})     // 781
      AADD(ESTRU, {"DATA","C",08,0})     // 82006061
      AADD(ESTRU, {"LOTE","C",07,0})     // 3000000
      AADD(ESTRU, {"SEQLOTE","C",03,0})     // 000
      AADD(ESTRU, {"CENTRO","C",05,0})     // 1KFC0
      AADD(ESTRU, {"FILLER3","C",46,0})     // 18  ????????????????? 46 BYTES ????
      AADD(ESTRU, {"SEQ","C",10,0})     // 0000000002 ==> este campo sequência está caindo no FILLER3
      DBCREATE("DADOS",ESTRU)
   ENDIF

   USE DADOS
   * ZAP

   APPEND FROM (ARQTXT) SDF ALL
   GO TOP

   Browse()

   SET DEVICE TO PRINT
   SET PRINT TO ("ARQTXT_Out.Txt")

   DO WHILE DADOS->(!EOF())
      @ L,C SAY DADOS->COMP + DADOS->BANCO + DADOS->AGENCIA + DADOS->DV2 + DADOS->;
      CONTA + DADOS->DV1 + DADOS->CHEQUE + DADOS->DV3 + DADOS->;
      FILLER + Str( DADOS->VALOR / 100, 17,2) + DADOS->TIP + DADOS->TIPO + DADOS->FILLER2 + DADOS->;  // ==> Alterei para Str( DADOS->VALOR / 100, 17,2)
      BCOREM + DADOS->AGEREM + DADOS->AGEDEP + DADOS->CONDEP + DADOS->COMPAC + DADOS->;
      DATA + DADOS->LOTE + DADOS->SEQLOTE + DADOS->CENTRO + DADOS->FILLER3 + DADOS->SEQ
      DADOS->(DBSKIP(1))
      L := L + 1
      @PROW() + 1,00 SAY""
   ENDDO

   SET PRINT TO // ==> incluí esta linha

   SET DEVICE TO SCREEN
   SET PRINT OFF

   DBCLOSEALL()
   DELETE FILE "ARQTXT_Out.Txt"

   QUIT
Notas:
- Preste atenção ao postar uma mensagem nova. Poste no fórum adequado. Fórum Bate-papo não é o local correto para postar este tópico.
- Ao postar código fonte, faça-o entre as tags apropriadas. Veja aqui como usar.
[]´s
Alexandre Santos (AlxSts)
isac.santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 17 Jun 2024 17:01
Localização: São Paulo

IMPORTAÇÃO ARQUIVO - APPEND

Mensagem por isac.santos »

A importação segue normal, o campo númerico gostaria que importa-se sem os ZEROS na frente do valor e separado com PONTO 0.00 EX. 703.68

Obs. Está fonte usava para alterar dados do arquivo primeiro importava e depois alterava via DBU ou alterava algo simples como sequencial via programa achava mais fácil, mas o principio da importação é o mesmo.
Filler 3 alterei algo mudou a posição é só mesmo o campo númerico que preciso aprender.
(Importava alterava determinada condição e exportava o mesmo layout de arquivo.)


Obrigado pela resposta.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

IMPORTAÇÃO ARQUIVO - APPEND

Mensagem por alxsts »

Olá!
isac.santos escreveu:o campo númerico gostaria que importa-se sem os ZEROS na frente do valor e separado com PONTO 0.00 EX. 703.68
Neste caso, o campo deverá estar com ponto decimal no arquivo texto:

Código: Selecionar todos

No arquivo .TXT,
o campo deve estar com o ponto decimal  >------+
                                               | 
                                               v 
0182370156400775017755540009063 000000000000703.685140040905980030003008002037818200606130000000001KFC018 0000000002
0183412627800615901975160003575 000000000000558.735140040905980030003008002037818200606130000000002KFC018 0000000003

São 18 posições sendo uma delas ocupada pelo ponto decimal, que também conta.

Na estrutura do arquivo .DBF, 18 posições:
   AADD( ESTRU, { "VALOR","N", 18, 2 } )
Captura de tela 2024-09-02 151043.png
Parece que este arquivo .TXT vem pronto de algum outro lugar. Neste caso, vem sem o ponto decimal. Neste caso, grave o teu .DBF sem casas decimais e trate depois, dividindo por 100.

Código: Selecionar todos

AADD(ESTRU, {"VALOR","N",17,0})
Captura de tela 2024-09-02 151814.png
[]´s
Alexandre Santos (AlxSts)
Responder