Set Printo to arq.txt (primeira linha em branco)

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

donato23
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 13 Jul 2004 17:07
Localização: Catanduva/SP
Contato:

Set Printo to arq.txt (primeira linha em branco)

Mensagem 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.
Wilson Roberto Donato Filho
Eng.Civil-Crea 5061716717
www.robertodonato.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Editado pela última vez por Pablo César em 19 Abr 2008 13:05, em um total de 1 vez.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

SET PRINT TO

Mensagem 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.
Alcir
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 17 Abr 2008 10:57
Localização: sao paulo

Mensagem por Alcir »

Bem estranho isso.

Mas não precisa usar o SET CONSOLE OFF, pq vai direto pro .TXT, experimente tira-lo. Abraços
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
donato23
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 13 Jul 2004 17:07
Localização: Catanduva/SP
Contato:

Mensagem por donato23 »

Obrigado à todos,
depois de explicado e exemplificado , tudo se torna simples rs.rs.rs
O flag logico sugerido pelo Pablo resolve tudo.
Wilson Roberto Donato Filho
Eng.Civil-Crea 5061716717
www.robertodonato.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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).
"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 do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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?
"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 do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Hahahaha... isto acontece comigo também quando alguém me chama de Paulo...

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

[Toledo]
E não é que a sua dica funcionou mesmo. Valeu.

[donato23]
Vc conseguiu resolver sua dúvida?
"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}
Responder