Página 1 de 1

Arquivo TXT para DIRF

Enviado: 09 Jan 2008 17:30
por locio
Obrigado a todos. Consegui. Apenas a titulo de esclarecimento informo que a unica forma que funcionou foi com a utilização do fwrite()

SELE ARQDBF
GO TOP

FHANDLE = FCREATE(ARQTXT,2)

WHILE !EOF()

FWRITE (FHANDLE, CAMPO + CHR(13) + CHR(10) )

SELE ARQDBF
SKIP
ENDDO

FCLOSE(FHANDLE)

Ai está o algoritmo completo. Simples.

Obrigado a todos,

José Malta Lócio

Enviado: 09 Jan 2008 18:13
por gvc
SELE ARQDBF
GO TOP

FHANDLE = FCREATE(ARQTXT,2)

WHILE !EOF()

FWRITE (FHANDLE, CAMPO + CHR(13) + CHR(10) )

SELE ARQDBF <<== Pode apagar esta linha!!!
SKIP
ENDDO

FCLOSE(FHANDLE)

Enviado: 09 Jan 2008 18:14
por Pablo César
O arquivo do DIRF teria que ser gerado com atributo "H" ? Por quê está FCREATE(ARQTXT,2) e não FCREATE(ARQTXT,0) ?

Enviado: 10 Jan 2008 11:27
por janio
Pessoal,

Aproveitando o tópico...

Qual a diferença de se criar TXTs usando FCREATE/FWRITE ou utilizar SET PRINTER TO arquivo/@ PROW() ???? Há algum ganho de velocidade nisso ???

Jânio

PS: Uso SET PRINTER TO arquivo/@ PROW() principalmente na criação de relatórios para serem visualizados na tela.

Enviado: 10 Jan 2008 11:39
por Maligno
Acredito que não haja nenhuma diferença tão grande de velocidade. No final dá elas por elas. :)

Enviado: 10 Jan 2008 12:22
por gvc
Com o set printer vc manda criar um arquivo no formato texto.
Se vc usa @ say quando vc muda a coordenada de linha, no arquivo texto, a linha anterior recebe o CR+LF.
Se vc usa ?, no arquivo texto é mandado um CR+LF e depois estra o texto que vc mandou gravar.
Para não pular a linha antes de gravar os dados, use ??.

No final do arquivo texto vai um caracter de final de arquivo. CHR(26).

O FWrite faz gravação em baixo nivel. É uma sequência de bytes, não importando o que seja.
Tanto que para montar um arquivo texto, ao final de cada linha, vc tem que mandar obrigatoriamente o CR+LF.
Com as funções de baixo nível, vc abre quaisquer tipo de arquivo.

Ah! CR+LF é para formato DOS. Se for no formato UNIX é só o LF.

Enviado: 10 Jan 2008 12:35
por janio
Ok.

Pensei que fosse mais rápido usando FCREATE/FWRITE.

Jânio

Enviado: 10 Jan 2008 12:41
por Maligno
Pode até ser mais rápido. Depende da implementação. Mas sem dúvida, as funções de baixo nível são bem mais flexíveis, apesar de, normalmente, darem mais trabalho. Mas isso é relativo também. Fazendo algumas funções de abstração pode ficar até bem mais fácil.

Enviado: 10 Jan 2008 14:15
por Eolo
Info:
a) FCREATE(ARQTXT,0) // abre somente leitura
b) FCREATE(ARQTXT,2) // abre leitura/gravação

Enviado: 10 Jan 2008 14:38
por Pablo César
Pois é... Eolo eu perguntei mas o Locio ainda não respondeu. Também não sei dizer se a normativa da Receita é para criar o arquivo em modo oculto... (acho que foi erro, mesmo)

Obs.: Alias Eolo, o 2 do FCREATE é HIDEN not READONLY...

Enviado: 10 Jan 2008 14:54
por Eolo
Ops, falha minha. Confundi com o FOPEN():

fopen(arqtxt,2) // abre em modo leitura e gravação

Aliás, tem mesmo algo de errado no FCREATE com 2! Pra que CRIAR um arquivo HIDDEN? O assunto é tão confidencial que nem o próprio criador pode ver? (não resisti à brincadeira...)

Agora, sério: eu acho que muita gente COPIA e COLA coisas, compila e manda rodar. Sem perguntar o porque delas, sem entender o que está acontecendo. Aquilo de ganhar um peixe ao invés de aprender a pescar...

Enviado: 10 Jan 2008 14:58
por Pablo César
hihihi, acho que sim... essa foi boa ! Mas quem sabe ? Esse pessoal do órgão público... vou te dizer... querem tudo TOP-SECRET... hihihi

Enviado: 10 Jan 2008 18:10
por Maligno
Às vezes o cidadão quer criar um arquivo oculto para esconder algum dado sigiloso. Agora, não é porque fica oculto que não pode ser acessado.