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...
IMPORTAÇÃO ARQUIVO - APPEND
Moderador: Moderadores
-
isac.santos
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 17 Jun 2024 17:01
- Localização: São Paulo
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
IMPORTAÇÃO ARQUIVO - APPEND
Olá!
Testei aqui... o problema está no mapeamento dos campos do TXT para o DBF. Revise este ponto.
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.
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
- 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)
Alexandre Santos (AlxSts)
-
isac.santos
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 17 Jun 2024 17:01
- Localização: São Paulo
IMPORTAÇÃO ARQUIVO - APPEND
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.
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

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
IMPORTAÇÃO ARQUIVO - APPEND
Olá!
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.
Neste caso, o campo deverá estar com ponto decimal no arquivo texto: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
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 } )Código: Selecionar todos
AADD(ESTRU, {"VALOR","N",17,0})[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)