Página 1 de 1

Arquivo .TXT com linha em branco no final

Enviado: 24 Fev 2010 18:19
por rbonotto
Ola, estou com um problema meio...estranho...

Tenho que gerar um arquivo .TXT com a 1º linha sendo header, o numero de registros depois como registros de clientes e a ultima com trailler.

Este arquivo sera enviado e lido por um mainframe, fiz da seguinte forma:

Código: Selecionar todos

aRqName := 'C:\MIX\TXT\' + aRqName + '.TXT'
SET PRINTER TO &aRqName.
SET DEVICE TO PRINT


**** INICIO HEADER registro A
@ PROW()  , 00 SAY 'A'
@ PROW()  , 01 SAY '1'
@ PROW()  , 02 SAY '007615'
@ PROW()  , 22 SAY 'XXXXXXX'
@ PROW()  , 42 SAY '037'
@ PROW()  , 45 SAY 'XXXXXXXXX'
@ PROW()  , 65 SAY cDta
@ PROW()  , 73 SAY nSa
@ PROW()  ,149 SAY '.'
**** FIM HEADER registro A


**** INICIO registro E - clientes
DBGOTOP()
WHILE !EOF()

   @ PROW()+1 , 00 SAY 'E'
   @ PROW()   , 01 SAY cedente
   @ PROW()   , 26 SAY '7E5'
   @ PROW()   , 30 SAY mYidt
   @ PROW()   , 47 SAY vLr
   @ PROW()   , 64 SAY '03'
   IF nparcelas > 0
      @ PROW()   , 66 SAY '01'
      @ PROW()   , 68 SAY STRZERO(nparcelas,2)
   END
   @ PROW()   ,149 SAY 'I'
   SKIP
END
DBGOTOP()
**** FIM registro E - clientes

**** INICIO registro Z - trailler
@ PROW()+1  , 00 SAY 'Z'
@ PROW()    , 01 SAY tOtCli
@ PROW()    , 07 SAY xVlr
@ PROW()    , 149 SAY '.'

**** FIM registro Z - trailler
SET PRINTER OFF
SET PRINTER TO
SET DEVICE TO SCREEN
Funciona ok, mas ele adiciona uma linha em branco apos o trailler e com isto da pau na transmição. Se entrar no edit/notepad e
retirar esta linha o arquivo vai belezinha.

Alguem saberia como faço para que esta linha não seja adicionada no fim ? o cliente esta meio p*to de ter que entrar no arquivo
toda vez, e com razão né :-o

Abs

Re: Arquivo .TXT com linha em branco no final

Enviado: 24 Fev 2010 19:47
por sygecom
Para evitar essa linha em branco você pode usar funções de baixo nivel:
FOPEN(), FWRITE(), FSEEK() E FCLOSE().
O @PROW() adiciona automaticamente ao final da linha a quebra da linha.

Re: Arquivo .TXT com linha em branco no final

Enviado: 24 Fev 2010 20:45
por rbonotto
Opa ! Obrigado por responder sygecom !

O problema é que as colunas e linhas tem que ser colocadas exatamente em suas posições, se sair uma do lugar o arquivo é rejeitado.
Não tenho pratica com os comandos citados, poderia dar um pequeno exemplo ?

Abraços,

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 07:48
por SandroBelarmino
rbonotto escreveu:O problema é que as colunas e linhas tem que ser colocadas exatamente em suas posições, se sair uma do lugar o arquivo é rejeitado.
Para cada linha que voce vai incluir no arquivo com fwrite(), voce a coloca em uma string, com os campos formatados de acordo com o layout que voce precisa seguir, incluindo espaços em branco se necessário.
Não esqueca de incluis no final da string os comandos: chr(13)+chr(10) para ir pra próxima linha.
Ex.

Código: Selecionar todos

nhandle:=fcreate("REPRES.TXT",0)
fclose(nhandle)
nhandle:=fopen("REPRES.TXT",2)
wlinha:=vencod+left(vennome,20)+chr(13)+chr(10)
fwrite(nhandle,wlinha)
fclose(nhandle)
Sandro.

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 07:50
por Toledo
Amigo, eu não testei, mas acho que isto vai resolver:

Código: Selecionar todos

aRqName := 'C:\MIX\TXT\' + aRqName + '.TXT'
Set print on
set console off
set print to (aRqName)

**** CRIANDO VARIAVEL cLinha
cLinha:=SPAC(150)

**** INICIO HEADER registro A
Monta('A',1)
Monta('1',2)
Monta('007615',3)
Monta('XXXXXXX',23)
Monta('037',43)
Monta('XXXXXXXXX',46)
Monta(cDta,66)
Monta(nSa,74)
Monta('.',150)
**** FIM HEADER registro A

?? cLinha
?

**** INICIO registro E - clientes
DBGOTOP()
WHILE !EOF()
  cLinha:=SPAC(150)

  Monta('E',1)
  Monta(cedente,2)
  Monta('7E5',27)
  Monta(mYidt,31)
  Monta(vLr,48)
  Monta('03',65)

  IF nparcelas > 0
    Monta('01',67)
    Monta(STRZERO(nparcelas,2),69)
  END
  Monta('I',150) 
  ?? cLinha
  ?
  SKIP
END
DBGOTOP()
**** FIM registro E - clientes

cLinha:=SPAC(150)

**** INICIO registro Z - trailler
Monta('Z',1)
Monta(tOtCli,2)
Monta(xVlr,8)
Monta('.',150)
**** FIM registro Z - trailler

?? cLinha
?

set console on
Set print off
set print to 

Código: Selecionar todos

Proc Monta(cExpr,nCol)
Local nLen:=LEN(cExpr)
cLinha:=STUFF(cLinha,nCol,nLen,cExpr)
Retu
Na função acima o primeiro parâmetro tem que ser do tipo caractere e o segundo é a coluna onde cExpr vai entrar.

Faz um teste ai e se der algum erro, me envie o DBF e o conteúdo das variáveis cDta, nSa, mYidt, vLr, tOtCli e xVlr, para que eu possa fazer alguns testes aqui.

Abraços,

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 18:15
por rbonotto
Obrigado pela atenção dos colegas.

Testei todos os exemplos dados pelos colegas e a dita cuja da linha em branco continua aparecendo :-o

Probleminha danado !!!

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 18:25
por Toledo
Amigo, tente tirar o último "?" do exemplo que lhe passei.

Ficando assim:

Código: Selecionar todos

**** INICIO registro Z - trailler
Monta('Z',1)
Monta(tOtCli,2)
Monta(xVlr,8)
Monta('.',150)
**** FIM registro Z - trailler

?? cLinha
****?  //tira esta linha.

set console on
Set print off
set print to 
Abraços,

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 19:40
por rbonotto
Retirei o ultimo "?" e a linha continua aparecendo ! esta pior que encosto ! hehehehe

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 20:07
por Toledo
Amigo, fiz um teste aqui usando o exemplo que lhe passei, e não aparece a linha em branco no final. Segue em anexo o PRG que eu testei.

Para compilar usei o Clipper 5.2e e o RTLink, coisa bem simples:

CLIPPER bonotto
RTLINK FI bonotto

Obs.: como não sei qual é a estrutura do arquivo, acabei inventando alguns campos, mas o que importa é o final do arquivo. Faça um teste ai!

Abraços,

Re: Arquivo .TXT com linha em branco no final

Enviado: 25 Fev 2010 22:04
por sygecom
Se você fez o teste com FOPEN() a ultima linha do FWRITE() do seu arquivo não pode ter o chr(13)+chr(10).

Re: Arquivo .TXT com linha em branco no final

Enviado: 26 Fev 2010 11:28
por rbonotto
Resolvido !!!!! o arquivo anexado bonotto.prg funcionou perfeitamente, troquei pelos dados do DBF e
entrou belezinha.

Este forum arrebenta ! Muito obrigado pessoal :-Y :{ :{ :{