Página 1 de 2
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 07:28
por leandromiler
Pessoal, bom dia, todos bem? Espero que sim !!
Estou tendo um problema na importação de um arquivo txt padrão Conemb/PROCEDA/NOTFIS
No meu sistema importo este padrão para um PDF, e após isso vou tratando linha por linha para importar os dados pra minha tabela interna.
Tudo funciona perfeitamente há anos.
O Problema é que alguns dias atrás um clientes que já utiliza esta rotina, recebeu o arquivo de um novo cliente dele, e este arquivo não importa.
Vou postar aqui a rotina de importação que funciona há muitos anos. e tambem o arquivo que não está importando.
Gostaria de ajuda dos amigos especialistas aqui, pois não estou conseguindo resolver.
Desde já agradeço o apoio deste grupo e de todos !!
// parte da rotina de importação que funciona perfeitamente até hoje --------------------------
sele nfe
set order to 1
mID_COL=SPACe(7)
SELE INEXIST
USE IMPPROC ALIAS IMPPROC NEW
do while .t.
CLEAR
mENCONTRA=SPACE(50)
mTERMOMETR:=0
mPEDACO:=0
mTROCA=SPACE(50)
mENCONTRA=RTRIM(LTRIM(mENCONTRA))
declare arqs[adir("\proceda\*.TXT")]
xPATH='\proceda\'
adir('\proceda\*.txt',arqs)
conta=1
mFIM:=len(arqs)
IF mFIM < 180
@ 10,10 SAY REPLICATE('°',mFIM)
mPEDACO=ROUND(100/mFIM,2)
mTERMOMETRO=mPEDACO
@ 08,00 SAY 'PORCENTAGEM COMPLETADA ==>'
@ 20,05 SAY '° -> Arquivo nao visto'
@ 21,05 SAY '² -> Arquivo vasculhado'
@ 22,05 SAY 'x -> Arquivo alterado'
ENDIF
do while conta <= Mfim
@ 10,(CONTA+9) SAY '²'
Mtexto=memoread(xPATH+arqs[conta])
IF LEN(MTEXTO)<30
FERASE(xPATH+arqs[conta])
CONTA++
LOOP
ENDIF
USE IMPORTA NEW
ZAP
APPEND FROM &(xPATH+ARQS[CONTA]) SDF
GO TOP
DO WHILE .T.
@ 08,40 SAY ' '
@ 08,40 SAY ARQS[conta]
mREG:=mCAMPO:=0
// -----------------------
Anexo está o arquivo real do cliente que não importa no Append FROM SDF
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:07
por Itamar M. Lins Jr.
Olá!
Agora vc coloca um que ele importa sem problema.
Saudações,
Itamar M. Lins Jr.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:14
por leandromiler
Olá, bom, veja este arquivo em anexo importa sem problemas.
Veja
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:19
por leandromiler
Durante o teste que fiz tentando importar, após a importação SDF, analisei linha por linha (registro por registro) importado
Percebi que, neste arquivo que dá o erro, ele importa dando um espaço em branco em cada letra por exemplo
(o inicio de um determinado registro seria "310RIBEIRAO")
ele importa o seguinte
"3 1 0 R I B E I R A O"
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:22
por Itamar M. Lins Jr.
Olá!
É diferente.
Por exemplo esse campo enorme, não tem no outro.
0000100000000000049761000000400000NN000000000000000000000000000000CUM5200N000000000000000000000000000000000000000000000000000000000001I000000000000000000000000N
Já comparou as posições ?
Saudações,
Itamar M. Lins Jr.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:27
por leandromiler
Sim, ja comparei
O que pode ocorrer é que em alguns txts tem outros registros que nao tem em outros.
então meu sistema compara os primeiros 3 digitos de cada linha por exemplo "310", aí ele sabe que é pra ler no padrão do layout do registro 310.
O registro que não precisa importar, simplesmente ele ignora e passa pra proxima linha
veja exemplo abaixo ele importa se for linha 311, 312 e mais alguns registros, se for diferente disso ele da um skip na linha importada e passa pra proxima até o final do arquivo
O que percebi é que nestes arquivos especificos ele importa dando um espaço em branco em cada numero, faça o teste ai importando um arquivo destes via SDF, vai ver que dá estes erro.
DO WHILE .T.
x=1
mlinha=linha1
ALERT2(LEFT(MLINHA,50)) // TIRAR DEPOIS
IF LEFT(mLINHA,3)='311'
mCGC =substr(mLINHA,04,14)
mCOL_UF =substr(mLINHA,117,02)
mCOLETA =substr(mLINHA,073,35)
mIE =ALLTRIM(substr(mLINHA,018,15))
X=6
mEMIT=SUBSTR(MCGC, 1, 2)+'.'+SUBSTR(MCGC, 3, 3)+'.'+;
SUBSTR(MCGC, 6, 3)+'/'+SUBSTR(MCGC, 9, 4)+'-'+;
SUBSTR(MCGC,13, 2)
ENDIF
IF LEFT(mLINHA,3)='312'
mNOME =substr(mLINHA,4,40)
mFANTASIA =substr(mLINHA,4,40)
mCGC =substr(mLINHA,44,14)
mENDE =substr(mLINHA,73,40)
mNUMERO =substr(mLINHA,58,15)
mBAIRRO =substr(mLINHA,113,20)
mCEP =substr(mLINHA,168,09)
mCIDADE =substr(mLINHA,133,35)
mID_CIDADE =substr(mLINHA,177,07)
mFONE=' '
mUF =substr(mLINHA,186,02)
mID_PAIS ='01058'
mPAIS ='BRASIL'
mIE =ALLTRIM(substr(mLINHA,058,15))
X=6
IF EMPTY(mCIDADE)
mOLDALIAS=ALIAS()
// Procura no cadastro interno - parte do cep
SELE CIDADE
mCEPPEDACO=LEFT(RTRIM(mCEP),5)
LOCATE FOR LEFT(CEP,5)=mCEPPEDACO
if !eof()
mCIDADE=CIDADE->CIDADE
mUF=CIDADE->UF
IF EMPTY(mID_CIDADE)
mID_CIDADE=BuscaIBGE(mCIDADE,mUF)
ENDIF
else // PROCURA NO CADASTRO DO IBGE
mCEPPADRAO=RTRIM(mCEP)
SELE CADCEP
SEEK mCEPPADRAO // procurou por cep padrão
if !eof()
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 08:49
por Itamar M. Lins Jr.
Olá!
A linha final do que dá erro é maior vai até 322 <LN>
A outra que funciona fica variando 241 e 284. Não sei qual é seu padrão para isso. Talvez versões diferente do sistema que está gerando esse TXT.
Saudações,
Itamar M. Lins Jr.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 09:05
por leandromiler
São arquivos de empresas diferentes, gerada por sistemas diferentes
conseguiu importar usando o SDF?
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 12:38
por JoséQuintas
Deu uma olhada num editor igual programmers notepad pra conferir o conteúdo ?
Formato diferente, resultado diferente.
Nem me pergunte que formato é esse, não faço idéia.
Num chute: formato de 2 bytes, o que explicaria uma letra e um possível espaço em branco.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 14:26
por leandromiler
O estranho é que já uso assim a muito anos, já importei usando esta mesma rotina arquivos padrão CONEMB de muitas empresas diferentes.
é a primeira vez em muitos anos que presencio este problema.
Será que teria algum utilitario que eu executasse e ele mudaria o formato da codificação do arquivo pra eu conseguir importar normalmente como consigo os outros?
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 15:09
por leandromiler
Descobri que estes arquivos não estão no padrão ASCII
Se tiver, ele importa normal
existe algum utilitario de linha de comando que posso usar para fazer essa transoformaçao ?
PS Y:\proceda> Get-Content edi0000003199.txt | Set-Content -Encoding ascii test-ascii2.txt
PS Y:\proceda> Get-Content edi0000004193.txt | Set-Content -Encoding ascii test-ascii3.txt
Eu descobry este acima no powershell,
mas nao consigo colocar caracteres coringas, Será que existe algo mais pratico que posso automatizar tipo gerar um arquivo em lot no dos?
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 17:44
por Itamar M. Lins Jr.
Olá!
Basta vc saber em que formato está.
Ai o harbour converte para seu padrão.
Saudações,
Itamar M. LIns Jr.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 18:46
por leandromiler
Fiz o teste e sei que se transformar pro ASCII funciona a importação
Se o harbour fizer isso aí resolve tudo, pois este meu aplicativo está em harbour
qual comando teria que fazer no harbour para transformar para o ASCII ?
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 23 Mai 2024 19:14
por Itamar M. Lins Jr.
Olá!
No Linux tem um comando que diz o conteúdo do tipo do arquivo, baseado nisso vc pode fazer ai sua importação.
Código: Selecionar todos
itamar@itamar-desktop:~/Downloads$ file edi0000004193.TXT
edi0000004193.TXT: Unicode text, UTF-16, little-endian text, with very long lines (321), with CRLF line terminators
Ai vc precisa identificar o arquivo que é UTF8
if hb_StrIsUTF8(memoread("edi0000004193.TXT" )) //identifica
Depois que identifica, vc converte e grava não sei, essa parte é com vc, se vai grava no disco ou vai ler direto da string sem precisar gravar em disco.
cFile := hb_UTF8ToStr( "edi0000004193.TXT" ) //converte
Mas neste caso ai tá dizendo que é UTF16. Veja ai se com UTF8 vai.
Saudações,
Itamar M. LIns Jr.
APPEND SDF NAO FUNCIONA COM ARQUIVO TXT
Enviado: 24 Mai 2024 08:32
por leandromiler
Opa Itamar, vou tentar aqui e retorno
Obrigado por enquanto!!!