Página 1 de 1
Gravação de arquivo TXT
Enviado: 26 Jan 2011 15:27
por reinaldo
Olá amigos
Há anos gravo arquivos TXT para a NFPaulista e nunca tive problema. Sempre fiz assim:
Código: Selecionar todos
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:
Código: Selecionar todos
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
Re: GRAVAÇÃO DE ARQUIVO TXT
Enviado: 26 Jan 2011 16:14
por SandroBelarmino
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.
Re: Gravação de arquivo TXT
Enviado: 26 Jan 2011 23:00
por gvc
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.
Re: Gravação de arquivo TXT
Enviado: 27 Jan 2011 08:44
por reinaldo
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
Re: Gravação de arquivo TXT
Enviado: 27 Jan 2011 11:32
por billy1943
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
Re: Gravação de arquivo TXT
Enviado: 27 Jan 2011 12:00
por asimoes
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"
Re: Gravação de arquivo TXT
Enviado: 27 Jan 2011 13:34
por DLZ
Acredito que a solução mais simples seja colocar um SETPRC(0,0) DEPOIS DO SET DEVICE TO TEXTO
Re: Gravação de arquivo TXT
Enviado: 27 Jan 2011 14:35
por reinaldo
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
Re: Gravação de arquivo TXT
Enviado: 10 Fev 2011 17:17
por beltrani_mi
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
Re: Gravação de arquivo TXT
Enviado: 10 Fev 2011 18:54
por reinaldo
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
Re: Gravação de arquivo TXT
Enviado: 10 Fev 2011 21:07
por beltrani_mi
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.
Gravação de arquivo TXT
Enviado: 26 Nov 2018 15:45
por Lukas Lima Souza
gerar arquivo txt com 'insert into'
Código: Selecionar todos
#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