Erro: arq txt nao gera CR e LF no final

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

locio
Usuário Nível 2
Usuário Nível 2
Mensagens: 98
Registrado em: 27 Out 2006 14:21

Erro: arq txt nao gera CR e LF no final

Mensagem por locio »

Estou gerando um arquivo para SPED Contabil e ele está dando a mensagem:

Ultima linha da escrituração não termina com os caractere CR (corriage return) e LF (line feed)

Não estou conseguindo resolver via o algoritmo do programa.

Código: Selecionar todos


             SELE CTBSPED
             GO TOP
             set alternate to &arquiv

             vez1 = .t.

             WHILE   !EOF()

                    set console off
                    set alternate on

                    if  vez1
                        vez1 = .f.
                        ?? TRIM(sgcampo)
                    else
                        ?  TRIM(sgcampo)
                    endif

                    set  alternate off
                    set  console on

                    SELE CTBSPED
                    SKIP

             ENDDO
             
             set alternate off

             close alternate

Para resolver estou fazendo o seguinte:

Edito o arq txt
deleto o ultimo caractere da ultima linha
salvo o txt

Valido o SPED Contabil sem problema depois desse procedimento

Ocorre que essa maneira não é legal. Acho estranho pois uso a mesma maneira de gerar txt para os sistemas SEF SEFIP RAIS e CAGED sem problemas.

Alguem pode me ajudar

Grato

Malta Lócio
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por alxsts »

Olá!
locio escreveu:Ultima linha da escrituração não termina com os caractere CR (corriage return) e LF (line feed)
Normalmente, cada linha de um arquivo texto é terminada pelo par CR + LF (Chr(13) + Chr(10)) e o arquivo é terminado por um Control+Z (Chr(26)).
Você diz que o problema é na última linha. Não sei se é particularidade do layout. Em qualquer dos casos, olhando o teu código, está faltando gravar esses caracteres Acho que o print (?) só envia o LF). Peço licença para otimizar o teu código, já colocando esses caracteres ao final de cada linha:

Código: Selecionar todos

   SELE CTBSPED
   GO TOP
   set alternate to &arquiv

   set console off
   set alternate on

   WHILE   !EOF()

      ?? TRIM(sgcampo) + Chr(13) + Chr(10)

      SKIP

   ENDDO
             
   ?? Chr(26)

   set alternate off
   close alternate
   set console on
Não testei. Se der problema, poste novamente.
Pessoalmente, eu usaria as funções de baixo nível...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por JoséQuintas »

Não, o problema é outro.
Quando ao código, NÃO PRECISA, mas eu simplificaria este trecho:

Código: Selecionar todos

if  vez1 
    vez1 = .f. 
    ?? TRIM(sgcampo) 
else 
   ?  TRIM(sgcampo) 
endif 
mudaria para:

Código: Selecionar todos

?? Trim(sgCampo) + Chr(13) + Chr(10)
E ao contrário do indicado, o problema não é acrescentar o Ctrl-Z e sim retirar o Ctrl-Z que é acrescentado por default.
Aqui uso esta função:

Código: Selecionar todos

Function FDelEof(mFile)
Local nHandle := 0
nHandle = fOpen(mFile,2)
fSeek(nHandle,-1,2)
Fwrite(nHandle,"")
fClose(nHandle)
Return NIL
Só comentário: eu nunca usei e nem sabia que existia o "close alternate". Sempre usei "set alternate to".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por lugab »

Pessoal, aproveito este tópico para perguntar se algum de vcs possue função pronta, pra retirar o caracteres "quadradinho" da primeira linha dos arquivos TXT que geramos, com intenção de imprimir com Win32Prn ou PrintFileRaw, mas que disponibilizamos antes para ser visualizado na tela.

Na impressão o quadradinho não aparece, mas na hora da exibição prévia na tela, ele fica la parecendo uma coisa q nós fizemos errada.

O detalhe é que esses arquivos textos não tem largura padrão, podendo ter menos ou mais de 80 colunas

Grato,

gabriel
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por JoséQuintas »

Qualquer caractere fora dos limites, no Windows é mostrado como o quadradinho ou algo parecido.
Mas no começo eu nunca vi, só no final.
Aqui uso um preview que fiz em VB, e nunca vi em nenhuma posição que não seja o final do arquivo.
Tem também no rebatido, ou num descuido, quando coloca um SAY para uma posição de coluna anterior à atual, que poderia ser considerado rebatido.
Ou algum caractere enviado à impressora, pra configuração especial, tipo Chr(15), talvez isto.
Investigue seu fonte. Talvez SetPrc(0.0)? quem sabe....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por lugab »

Entendi, José Quintas.

No meu caso, o código de geração do TXT é o tradicional e + simples possível, sem usar CHR() e com muito cuidado para não sobrepor caracteres..

Código: Selecionar todos

Set device to printer  
Set printer to C:\SIG.TXT

@ l,c    say texto1
@ l+1,c say texto2

Set printer off
Set printer to
Então, provavelmente, é o visualizador que eu uso, q gera o problema.

Alguém pode me indicar um bom visualizador, pois o que eu uso, baixei daqui mesmo do fórum, e não poderia imaginar q poderia ter esse tipo de problema. Como eu sou "fraquinho", eu tendo sempre a achar q sou eu que está fazendo algo errado.
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por JoséQuintas »

Antes de trocar de visualizador:
Tente abrir o arquivo por algum editor pra verificar se tem algum caractere lá.
Isso vai tirar a dúvida se o problema é seu arquivo ou o visualizador.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por lugab »

É verdade, José Quintas.

Eu abri com o edit e não apareceu quadradinho nenhum.

Inexperiència pouca, é bobagem, né ?

É o visualizador mesmo. O bom dele é que tem um monte de recursos, tipo busca de palavras no relatório texto, pra cima e pra baixo...
lugab
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por Maligno »

Um lembrete: alguns leitores suprimem caracteres não legíveis por sua própria conta. Pra ter certeza de que não há nada, abra o arquivo num editor hexa e procure no final do arquivo por algum caractere de valor baixo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
locio
Usuário Nível 2
Usuário Nível 2
Mensagens: 98
Registrado em: 27 Out 2006 14:21

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por locio »

Gente,

Agradeço a todos. Efetuei as modificações propostas e consegui validar sem precisar usar a "marreta".

Apenas para ilustrar deixo pra vocês abaixo como ficou o codigo.

Código: Selecionar todos


             set console off
     
             SELE CTBSPED
             GO TOP
            
             set alternate to &arquiv
             set alternate on

             WHILE   !EOF()

                    ?? TRIM(sgcampo) + chr(13) + chr(10)

                    SELE CTBSPED
                    SKIP
             ENDDO
  
             set  alternate off
             set alternate to

             set  console on

             fDelEof (arquiv)

Grato a todos.

Malta Lócio
alcinahelena
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 25 Fev 2011 16:15
Localização: Uberlândia/MG

Re: Erro: arq txt nao gera CR e LF no final

Mensagem por alcinahelena »

José Quintas, Valeu!!!
Sua solução foi muito preciosa. Agora posso sair de férias. Brigadão mess; Deu certíssimo.
Responder