Clipper On Line • Ver Tópico - Gravação de arquivo TXT

Gravação de arquivo TXT

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Gravação de arquivo TXT

Mensagempor reinaldo » 26 Jan 2011 14:27

Olá amigos

Há anos gravo arquivos TXT para a NFPaulista e nunca tive problema. Sempre fiz assim:
utf8=""
tr="|"
SET DEVICE TO PRINT
SET PRINTER TO nfp.txt
@PROW(),   0 SAY UTF8+"10"+tr+"1,00"+tr+"02223344000124"+tr+DTOC(vdatamin)+tr+dtoc(vdATAmax)

Grava o arquivo nfp.txt em UTF-8 certinho.

Recentemente comecei a gravar arquivos TXT para NFEletronica e está acontecendo um problema intrigante.
Faço da mesma maneira, assim:
SET DEVICE TO PRINT
SET PRINTER TO NFE.txt

TR="|"
UTF8=""

@PROW(),  0 SAY UTF8+"NOTAFISCAL"+tr+"1"
@PROW()+1,0 SAY "A"+tr+"2.00"+tr+"NFe"


Acontece que está gravando 2 caracteres estranhos no inicio da 1a. linha e está dando erro na importação pelo SEFAZ. (2 quadrados)
Estranho é que dei CTRL C no Bloco de Notas para vcs verem e não sairam, mas eles estão lá

NOTAFISCAL|1
A|2.00|NFe

Espero contar com ajuda de vcs pois os clientes estão reclamando já que estão tendo que editar o arquivo e retirar
esses caracteres.

Obrigado

Reinaldo
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
reinaldo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 105
Data de registro: 02 Mai 2005 13:08
Cidade/Estado: santos/sp
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Re: GRAVAÇÃO DE ARQUIVO TXT

Mensagempor SandroBelarmino » 26 Jan 2011 15:14

Experimente usar a função fwrite() para gerar o arquivo TXT, voce vai encontar vários exemplos aqui no fórum.
PS. Continue usando as variáveis utf para o início da primeira linha e a tr para o separador dos campos.
Alessandro R Belarmino
Clipper 5.2e - Blinker 7 - DBFNTX / DBFCDX
"Quem trabalha muito erra muito, quem trabalha pouco erra pouco, quem não trabalha não erra e quem não erra é promovido !!!!"
SandroBelarmino
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 464
Data de registro: 04 Set 2007 16:11
Cidade/Estado: Pedreira-SP
Curtiu: 18 vezes
Mens.Curtidas: 0 vez

Re: Gravação de arquivo TXT

Mensagempor gvc » 26 Jan 2011 22:00

Use um editor que tenha recurso de mostrar o arquivo em hexadecial (dump de arquivo) para verificar quais são esses caracteres.

Se for para posicionar o cursor/cabeça de impressão vc pode usar SetPrc(0,0) para limpar a informação de última posição de impressão que fica na memória do micro.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar de usuário

gvc
Colaborador

Colaborador
 
Mensagens: 1269
Data de registro: 23 Ago 2005 10:57
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Gravação de arquivo TXT

Mensagempor reinaldo » 27 Jan 2011 07:44

Olá amigos. Obrigado pelas respostas.
Vou estudar a função FWRITE. Acredito que com ela não vou ter problemas. Mas preciso desvendar esse mistério.
Descobri uma coisa:
O caracter estranho é este: 
Ele é usado pela impressora para coisas tipo condensação, 8 lpp, etc.
Como esse problema não acontece sempre, é possível que seja alguma sujeira de alguma impressão anterior,
ou qualquer coisa do tipo

Reinaldo
reinaldo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 105
Data de registro: 02 Mai 2005 13:08
Cidade/Estado: santos/sp
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Re: Gravação de arquivo TXT

Mensagempor billy1943 » 27 Jan 2011 10:32

Usando as funções FCREATE, FWRITE e FCLOSE não precisa se preocupar com UTFs e outras particularidades.

Para o caso da Nota Fiscal Paulista, um esquema genérico seria:

************************************
nome_arqui := { definir o nome que o arquivo a ser enviado tomará.
eu uso a forma: 11010131.txt onde -> 11 = ano, 01 = mes, 01 = dia inicial, 31 dia final}

separa := "|" // caracter 124
crlf := chr(13) + chr(10) // controle de carriage return e line feed
saidanf := fcreate(nome_arqui,0) // cria o arquivo de saida

fwrite(saidanf," .................. " + separa) // entre as aspas colocar o string necessário sem acentos ou cedilhas

ou

fwrite(saidanf,campo + separa) // colocar o nome do campo de formato caractere, esse campo não pode conter
// caracteres especiais

no final de cada registro:

fwrite(saidanf,crlf) // fecha a linha e avança para a próxima

no final de tudo:

fclose(saidanf) // fecha o arquivo
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar de usuário

billy1943
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 570
Data de registro: 12 Mai 2009 17:33
Cidade/Estado: Bauru-SP
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

Re: Gravação de arquivo TXT

Mensagempor asimoes » 27 Jan 2011 11:00

Pode usar também: (strfile - função da ca-tools)

StrFile(" .................. " + separa + crlf,nome_arqui,.T.)
ou
StrFile(campo + separa + crlf,nome_arqui,.T.)

¦ Add to the end of a file:

? STRFILE("ABCDEFGH", "TEST.TXT", .T.) // Result: 8

¦ A file with drive and path designations, result: 10:

? STRFILE("0123456789", "C:\TEXT\TEST.TXT", .T.)

¦ Data in an existing file is overwritten from position 20 with
a designated string:

? STRFILE("NANTUCKET", "TEST.TXT", .T., 20) // Result: 9

¦ A 5-character string is written starting at position 10 in an
existing file 20-characters long. Since the final parameter is
specified as .T. once, and specified as .F. once, you see different
results:

? STRFILE(REPLICATE("X", 20), "TEST.TXT")
? STRFILE("AAAAA", "TEST.TXT", .T., 10, .F // "XXXXXXXXXXAAAAAXXXXX"
? STRFILE("AAAAA", "TEST.TXT", .T., 10, .T // "XXXXXXXXXXAAAAA"
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Re: Gravação de arquivo TXT

Mensagempor DLZ » 27 Jan 2011 12:34

Acredito que a solução mais simples seja colocar um SETPRC(0,0) DEPOIS DO SET DEVICE TO TEXTO
DLZ
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 184
Data de registro: 09 Jun 2008 10:09
Cidade/Estado: Ibirubá - RS - Brasil
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

Re: Gravação de arquivo TXT

Mensagempor reinaldo » 27 Jan 2011 13:35

Coloquei o SETPRC(0,0) e parece que funcionou. Pelo menos gravei varios arquivos e o erro não ocorreu.
Obrigado a todos. vou estudar as outras idéias. Um serão úteis

Reinaldo
reinaldo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 105
Data de registro: 02 Mai 2005 13:08
Cidade/Estado: santos/sp
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Re: Gravação de arquivo TXT

Mensagempor beltrani_mi » 10 Fev 2011 16:17

Boa tarde a todos !

Fazia tempo que não entrava aqui no forum... Tive que criar até um novo usuário.

Não sei se poderia postar isso aqui, pois é uma pergunta sobre geração de arquivos usando "set device to printer" e o "set printer to arquivo".

O problema é que preciso gerar arquivos com os nomes gravados em letras minusculas (especificamente para gerar XML). Quando gero o arquivo, o sistema grava o nome do arquivo em maiusculo.

Alguem tem alguma solução ?

Sem mais

Grato
beltrani_mi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 21
Data de registro: 10 Fev 2011 16:07
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Gravação de arquivo TXT

Mensagempor reinaldo » 10 Fev 2011 17:54

Realmente, fiz um teste e gravou em letras maiusculas.
Tenho certeza que algum dos colegas vai resolver isso.
Aproveitando, como é que vc grava arquivo XML ? Também estou precisando disso.
Não só gravar mas tb ler um arquivo XML

Reinaldo
reinaldo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 105
Data de registro: 02 Mai 2005 13:08
Cidade/Estado: santos/sp
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Re: Gravação de arquivo TXT

Mensagempor beltrani_mi » 10 Fev 2011 20:07

E aí Reinaldo, td bom ?

Bom, para gerar um XML eu faço o seguinte:

arquivo=´teste.xml´
setprc(0,0)
set devi to prin
set prin to &arquivo
@ prow(),0 say <tag>+campo+´</tag>
@ prow()+1,0 say <tag>+campo+´</tag>
@ prow()+1,0 say ...
set prin to
set devi to scre

Para vc ler um XML, primeiro vc verifica qual o tamanho da maior linha do XML. Em seguida, cria um dbf temporario com um campo do tamanho da linha e grava nele cada linha usando o append from arquivo sdf.

Em seguida, é só ler cada registro desse dbf temporario e pegar o conteudo entre as tags.

Se não me engano aqui no site tem algumas dicas sobre o assunto pesquisando por XML.

Espero ter ajudado.

Sem mais

Grato

Ademir.
beltrani_mi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 21
Data de registro: 10 Fev 2011 16:07
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravação de arquivo TXT

Mensagempor Lukas Lima Souza » 26 Nov 2018 14:45

gerar arquivo txt com 'insert into'

#include "fileio.ch"
#include "dbstruct.ch"
#include "hbclass.ch"

procedure Main()

    public banco_a_icmuf
    public cont := LASTREC()
    public contt
    public files
    public nomeDoCampoDBD
    public i

    SET CENTURY on
    SET DEVICE TO PRINT
    SET PRINT ON
    SET DATE FORMAT "yyyy-mm-dd"
    SET TIME FORMAT  "HH:MM:SS"
    SET PRINTER TO arquivo.txt
    setFAttr("arquivo.txt", FC_NORMAL)
    USE a_icmuf
   
    banco_a_icmuf := a_icmuf->(DBSTRUCT())
    LIST "insert into a_icmuf (C_PRODUTO, C_UF, C_PCFP, C_ICMS, C_CST, C_DTATUAL, C_HRATUAL) values ("+C_PRODUTO+",'"+C_UF+"',"+Alltrim(Str(C_PCFP))+","+Alltrim(Str(C_ICMS))+",'"+C_CST+"','"+TRANSFORM(C_DTATUAL, "@D")+"','"+TRANSFORM(C_HRATUAL, "@R")+"');" off
   
    return
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Lukas Lima Souza
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 1
Data de registro: 26 Nov 2018 14:41
Cidade/Estado: Parnaíba/PI
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro