Página 1 de 1
Set Printo to arq.txt (primeira linha em branco)
Enviado: 19 Abr 2008 02:05
por donato23
Olá,
Porque em qualquer situação que é usado.:
Código: Selecionar todos
Set print on
set console off
set print to arq.txt
DO WHILE .not. eof()
? linhas
Skip
Enddo
set console on
Set print off
set print to
A primeira linha do arq.txt sai em branco??
No caso especifico, preciso usar algumas lista txt para direcionar para emails diferentes e depois o BLAT fazer o envio.
Código: Selecionar todos
.
.
USE MTODOS
GO TOP
FOR contlist=1 to var_l
contmail=0
Set print on
set console off
vplist="list"+allTrim(str(contlist,2))+".txt"
set print to &vplist
DO WHILE contmail < vr1
? linhas
Skip
contmail++
Enddo
set console on
Set print off
set print to
NEXT contlist
Neste caso, todas os TXT gerados, que variam dependendo do BD selecioanado, tem a primeira linha impressa em branco. Como remover esta linha? ou é uso correto so Set Print?
Obrigado.
Enviado: 19 Abr 2008 09:27
por Pablo César
Olá Wilson, isso é uma particularidade do comando de console.
O "?" envia um carriage-return/line-feed ao console antes de exibir os resultados da lista de expressões. E ja o "??" exibe a sa¡da na posição corrente do cursor ou cabeça de impressão. Isto permite que você use sucessivos "??" para exibir a sa¡da na mesma linha.
Então para que na 1ª linha do seu arquivo não seja pulada comece utilizando o "??" apenas uma única vez no processo todo da sua rotina. Cómo faz isso ?. Olhe este exemplo:
Código: Selecionar todos
/*Set print on
set console off
set print to arq.txt */
// Também dá para usar seta forma em vez da forma acima
SET ALTERNATE TO ("ARQ.TXT")
SET ALTERNATE ON
Uma_Vez:=.F. /* Pode fazer com uma flag logico */
Conta_Vez:=1 /* Ou com uma variavel tipo contador */
DO WHILE .not. eof()
/* este exemplo usa a variavel flag (var logica) */
IF Uma_Vez=.F.
?? linhas
Uma_Vez=.T.
ELSE
? linhas
ENDIF
/* agora outro exemplo caso voce utilize algum contador para compor
a linha do seu arquivo. */
IF Conta_Vez=1
?? STR(Conta_Vez)+linhas
ELSE
? STR(Conta_Vez)+linhas
ENDIF
Conta_Vez=Conta_Vez+1
Skip
Enddo
SET ALTERNATE OFF
SET ALTERNATE TO
/*set console on
Set print off
set print to*/
Espero ter esclarecido essa questão. Talvez até haja outro tratamento que poderá ser utilizado também e que os outros colegas queiram contribuir.
SET PRINT TO
Enviado: 19 Abr 2008 11:13
por Adalberto
Wilson,
Com toda seguridade que exemplo de Pablo César ira funcionar corretamente, solo como alternativa, em lugar de ? ou ?? eu utilizo a forma:
@ fila,coluna
Sem problema.
Enviado: 19 Abr 2008 11:21
por Alcir
Bem estranho isso.
Mas não precisa usar o SET CONSOLE OFF, pq vai direto pro .TXT, experimente tira-lo. Abraços
Enviado: 19 Abr 2008 11:24
por Maligno
Mas é o que o Pablo disse. É só trocar ? por ?? na primeira linha que o problema acaba. O NG explica: o comando ? antes de qualquer caractere, envia um par CR/LF para a saída. Por isso acontece o salto de uma linha.
Enviado: 19 Abr 2008 12:05
por donato23
Obrigado à todos,
depois de explicado e exemplificado , tudo se torna simples rs.rs.rs
O flag logico sugerido pelo Pablo resolve tudo.
Enviado: 19 Abr 2008 13:12
por Pablo César
Puxa... que chic ! Temos mais um colega que é engenheiro (aasim como o Manuel Modernel, Vander e outros). Que bom é contar com pessoas com conhecimentos técnicos do mais variados.
Notar que a minha mensagem foi re-editada, para mostrar outra forma de criar o arquivo.
Enviado: 19 Abr 2008 13:18
por Toledo
Amigos, só para simplificar mais os exemplos do Pablo.
Código: Selecionar todos
Set print on
set console off
set print to arq.txt
DO WHILE .not. eof()
?? linhas
?
Skip
Enddo
set console on
Set print off
set print to
Abraços,
Enviado: 19 Abr 2008 20:52
por Pablo César
?? linhas
?
Legal ! Bem lógico e simples, não testei mas poderia afirmar que isso está totalmente correto. Taí mais uma forma. Obrigado Toledo.
Enviado: 22 Abr 2008 13:39
por gvc
Código: Selecionar todos
set alternate to arq.txt
set alternate on
set console off
while !eof()
?? linha
?
dbskip()
end
set console on
set alternate off
set alternate to
Eu uso assim. Como o mestre Toledo postou eu acho que é para trabalhar com "@ linha,coluna", como postado pelo nosso amigo Adalberto (Santa Cruz - Bolivia).
Enviado: 22 Abr 2008 16:21
por Toledo
Gilberto, eu também uso desta maneira, mas procurei seguir o mesmo exemplo do Wilson, já que o resultado será o mesmo. E também dependendo da versão do Windows que o Wilson tiver usando (Windows XP por exemplo), o set alternate deixa no final do arquivo um quadradinho (caracter ASCII), que as vezes atrapalha, principalmente para validar arquivos de remessa (Bancos, Receita Estadual, Federal, etc), agora com o set printer to, sem usar o eject no final, isto não acontece.
Abraços,
Enviado: 22 Abr 2008 16:33
por gvc
[Toledo]
(Gilberto???) Juro que achei que era com outra pessoa que vc estava falando/respondendo.
Quando minha família trata pelo nome completo é pq eu fiz algo de errado.
O caracter é o final de arquivo, chr(26) ou CTRL Z, já discutido anteriormente neste forum.
Vou observar sua dica nos próximos arquivos que terei que gerar para envio.
[donato23]
Vc conseguiu resolver sua dúvida?
Enviado: 22 Abr 2008 16:39
por Toledo
Hahahaha... isto acontece comigo também quando alguém me chama de Paulo...
Abraços,
Enviado: 22 Abr 2008 17:31
por gvc
[Toledo]
E não é que a sua dica funcionou mesmo. Valeu.
[donato23]
Vc conseguiu resolver sua dúvida?