Pessoal, ola, no Clipper funciona bem tranquilo, agora no xHarbour não consegui com q funcionasse.
Tipo a função nao substitui as TAGs... Já tinha a função do colega Marcelo rodando na integra como postada e funcionando perfeitamente onde eu a utilizava para substituir uma TAG pelo conteúdo de um campo do DBF, onde é gerado um carnes com as parcelas do clientes.
Tal geração obedece um Layout pré-estabelecido em um TXT, q não pode ser mudado pois se não não imprime certo.
Ja debati muito esse assunto em vários tópicos conforme abaixo, e a melhor função q se adequou foi esta q o Marcelo fez com contribuições de outros colegas como Eolo, Maligno e talvez outros.
https://pctoledo.org/forum/viewto ... f=4&t=9003
Este tópico abaixo esta como resolvido, mas não foi utilizando a função PesqByte, pois passei a utilizar a função PesqByte posteriormente... Mas este tópico é bom para relembrar e inteirar sobre o assunto quem queira colaborar.
https://pctoledo.org/forum/viewto ... f=1&t=7919
Mas torno a repetir a mesma função compilada em xHarbour, não da o mesmo resultado q compilada no clipper, caso alguém saiba o pq seria muito util, não sei se os colegas q utilizam a mesma função conseguiram migrar par ao xHarbour?
Colegas, sei q pra alguns ou até muitos esta questão acima não é um problema, mas se vcs verificarem as datas dos tópicos e td mais, pra mim é uma situação difícil q infelizmente não estou conseguindo resolver...
Agradeço....
Att.
Função para pesquisar e trocar texto qquer tipo de arquivo
Moderador: Moderadores
Re: Função para pesquisar e trocar texto qquer tipo de arquivo
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Re: Função para pesquisar e trocar texto qquer tipo de arquivo
Se o problema se relaciona com o XHarbour, abra um novo tópico naquela seção, descrevendo em detalhes o que já faz e o que não está dando certo. Ou, se já existir tópico tratando deste assunto, apenas continue nele.no Clipper funciona bem tranquilo, agora no xHarbour não consegui com q funcionasse.
[]'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!
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!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Função para pesquisar e trocar texto qquer tipo de arquivo
Olá fladimir,
Vamos dar continuidade no topico abaixo:
viewtopic.php?f=4&t=9003
Vamos dar continuidade no topico abaixo:
viewtopic.php?f=4&t=9003
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Função para pesquisar e trocar texto qquer tipo de arquivo
Acho que após aquele problema que deu no servidor, as minhas mensagens sumiram. Foram alguma questões que levantei pro Fladimir e não sei se ele alcançou a ler. No que eu me lembro, percebí que ele usava o SET PRINTER TO ARQUIVO e que dentro desse bloco (inicialização até o fim da de criação do arquivo, nesse meio) talvez estivesse tentando substituir as tags sem antes de fechar o SET PRINTER OFF. Mas como foi duplicado o tópico (no Xharbour e nesta seção) espero que ele consiga detectar o problema.
Agora pegando carona no assunto, eu nestes momentos me encontrei com uma situação similar. A minha dúvida é se seria melhor criar um segundo arquivo durante a criação com SET PRINTER TO ARQUIVO e fazer uma função que crie um segundo arquivo com outro formato. Vou me explicar melhor:
Trata-se de um módulo de impressão. No qual eu coloco um menu para usuário escolher: Tela ou impressora. Seja qual for a opção, sempre crio um arquivo PRN para impressão. Se o usuário escolheu visualizar em tela o relatório, entra numa função de navegação de dentro de um MEMOEDIT (memoedit, porque os relatório não são grandes). Daí disponibilizei pro usuário uma opção para que crie e visualize esse relatório num formato diferente. Vamos dizer: cria uma planilha em Excel, por exemplo. Claro que o relatório tem uma formatação diferente a da planilha. Daí então acho que na hora da criação do arquivo PRN, deveria criar o outro arquivo ja no formato CSV (por exemplo) a fim de que se o usuário acionar a opção de criar o arquivo durante a visualização do relatório, ja disponha o arquivo sem a necessidade de reprocessamento. E aí que vem a minha dúvida. Acho que tenho duas opções:
1. Crio o arquivo PRN através do SET PRINTER TO <arquivo_prn> e adiciono ao mesmo tempo uma função que crie o arquivo CSV em baixo nível ?
2. Copio o arquivo PRN para CSV e trato esse arquivo, subtituindo as diferenças de formatos ?
Qual seria a opção mais rápida, segura e menos redundante, na opinião de vocês ?
Pergunto isto, pois não sei se é possível criar dois arquivos ao mesmo tempo (nunca fiz esse teste). è dizer poderia fazer a criação de um arquivo durante a varrida do BD, através do SET PRINTER TO <arquivo> e na linha abaixo do @ say to arquivo chamaria uma função onde passaria string por string para compor o segundo arquivo.
Será que não seria mais ou menos isso que está ocorrendo com o colega Fladimir em xHarbour ? Claro que se a dúvida é com xHarbour, essa resposta mereceria ser respondida lá. No entanto, se temos intenção de migrar as aplicações em Clipper, ja deveríamos estar sabendo que certos procedimentos não dariam em xHarbour. Com isto não quero dizer que o problema do Fladimir esteja aí. Talvez seja alguma mudança que ele fez e esqueceu de fechar o arquivo que estava sendo criando pelo SET PRINTER na hora que faz a substituição das tags.
Bem espero ter levantado uma questão provável sobre o problema do Fladimir e sobre a criação de dois arquivos simultaneamente (com SET PRINTER e FWRITE) por exemplo.
Agora pegando carona no assunto, eu nestes momentos me encontrei com uma situação similar. A minha dúvida é se seria melhor criar um segundo arquivo durante a criação com SET PRINTER TO ARQUIVO e fazer uma função que crie um segundo arquivo com outro formato. Vou me explicar melhor:
Trata-se de um módulo de impressão. No qual eu coloco um menu para usuário escolher: Tela ou impressora. Seja qual for a opção, sempre crio um arquivo PRN para impressão. Se o usuário escolheu visualizar em tela o relatório, entra numa função de navegação de dentro de um MEMOEDIT (memoedit, porque os relatório não são grandes). Daí disponibilizei pro usuário uma opção para que crie e visualize esse relatório num formato diferente. Vamos dizer: cria uma planilha em Excel, por exemplo. Claro que o relatório tem uma formatação diferente a da planilha. Daí então acho que na hora da criação do arquivo PRN, deveria criar o outro arquivo ja no formato CSV (por exemplo) a fim de que se o usuário acionar a opção de criar o arquivo durante a visualização do relatório, ja disponha o arquivo sem a necessidade de reprocessamento. E aí que vem a minha dúvida. Acho que tenho duas opções:
1. Crio o arquivo PRN através do SET PRINTER TO <arquivo_prn> e adiciono ao mesmo tempo uma função que crie o arquivo CSV em baixo nível ?
2. Copio o arquivo PRN para CSV e trato esse arquivo, subtituindo as diferenças de formatos ?
Qual seria a opção mais rápida, segura e menos redundante, na opinião de vocês ?
Pergunto isto, pois não sei se é possível criar dois arquivos ao mesmo tempo (nunca fiz esse teste). è dizer poderia fazer a criação de um arquivo durante a varrida do BD, através do SET PRINTER TO <arquivo> e na linha abaixo do @ say to arquivo chamaria uma função onde passaria string por string para compor o segundo arquivo.
Será que não seria mais ou menos isso que está ocorrendo com o colega Fladimir em xHarbour ? Claro que se a dúvida é com xHarbour, essa resposta mereceria ser respondida lá. No entanto, se temos intenção de migrar as aplicações em Clipper, ja deveríamos estar sabendo que certos procedimentos não dariam em xHarbour. Com isto não quero dizer que o problema do Fladimir esteja aí. Talvez seja alguma mudança que ele fez e esqueceu de fechar o arquivo que estava sendo criando pelo SET PRINTER na hora que faz a substituição das tags.
Bem espero ter levantado uma questão provável sobre o problema do Fladimir e sobre a criação de dois arquivos simultaneamente (com SET PRINTER e FWRITE) por exemplo.
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Função para pesquisar e trocar texto qquer tipo de arquivo
Puxa Fladimir, você colocou seu problema em três tópicos...Olá fladimir,
Vamos dar continuidade no topico abaixo: na seção xHarbour
Eu cheguei a pensar que as minhas mensagens que atendiam a sua questão tinham desaparecido, mas elas estão neste outro tópico: viewtopic.php?f=1&t=7919&start=30#p52571Pablo César escreveu:Acho que após aquele problema que deu no servidor, as minhas mensagens sumiram. Foram alguma questões que levantei pro Fladimir e não sei se ele alcançou a ler.
Sei que está com dificuldades em resolver esse problema em xHarbour, mas que confusão...
Acho que deveríamos, juntar essas mensagens num tópico apenas ou máximo em dois.
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.
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.
Re: Função para pesquisar e trocar texto qquer tipo de arquivo
Verdade Pablo eh q eu tinha colocado na xHarbour pq o problema aconteceu lá e como não consegui resolver reabri o do Clipper q foi resolvido com a PesqByte, mas devido no xHB não ter dado certo, voltei para ver se conseguia outra função q fizesse a mesma coisa q a PesqByte, mas q pudesse depois compilar no xHB, por isso esse vai e vem, mas agora estou continuando direto no do xHarbour, fica melhor em no máximo 2 tipo 1 do clipper e 1 do xHB.
Att.
:)Pos
Att.
:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Arquivo de impressão
Só para constar... ja que ninguém até agora respondeu a minha mensagem: viewtopic.php?f=1&t=7471&p=52606#p52606
Como eu disse antes, precisei de utilizar 3 arquivos de impressão com diferentes formatos. Passo a relatar a minha experiência, talvez sirva para outras situações similiares:
Na hora de criar um arquivo estou criando três, através do fwrite (função de baixo nível) a fim de criar diferentes formatos do mesmo processamento:
1. Um arquivo .PRN ja com os comandos de impressão.
2. Um arquivo .OEM sem comando, sem eject, apenas em puros ASCII no padrão DOS a fim de visualizar o relatorio
3. Um arquivo .ANS para abrir ou processar com utilitário no padrão Windows. Isto é, sem comandos de impressão mas a acentuação pronta para ser visualizada corretamente num editor padrão Windows (por exemplo um NOTEPAD).
Então decidí criar em vez de um arquivo, então três arquivos, no mesmo processamento. Com isto irei evitar re-processamento e talvez ganhar mais agilidade. Abandonei a idéia de criar o relatório através do SET PRINTER ou SET ALTERNATE. Em vez disso utilizo as funções em baixo nível FCREATE, FWRITE e FCLOSE, vejam como ficou parte do PRG:Faltam funções, portanto não poderá ser compilado de primeira. As funções que faltam não pretendo disponibilizá-las. Mas já com isto dá uma boa ideia de como trabalhar com várias criações de arquivos quase que ao mesmo tempo...
Como eu disse antes, precisei de utilizar 3 arquivos de impressão com diferentes formatos. Passo a relatar a minha experiência, talvez sirva para outras situações similiares:
Na hora de criar um arquivo estou criando três, através do fwrite (função de baixo nível) a fim de criar diferentes formatos do mesmo processamento:
1. Um arquivo .PRN ja com os comandos de impressão.
2. Um arquivo .OEM sem comando, sem eject, apenas em puros ASCII no padrão DOS a fim de visualizar o relatorio
3. Um arquivo .ANS para abrir ou processar com utilitário no padrão Windows. Isto é, sem comandos de impressão mas a acentuação pronta para ser visualizada corretamente num editor padrão Windows (por exemplo um NOTEPAD).
Então decidí criar em vez de um arquivo, então três arquivos, no mesmo processamento. Com isto irei evitar re-processamento e talvez ganhar mais agilidade. Abandonei a idéia de criar o relatório através do SET PRINTER ou SET ALTERNATE. Em vez disso utilizo as funções em baixo nível FCREATE, FWRITE e FCLOSE, vejam como ficou parte do PRG:
Código: Selecionar todos
..//..
VTIPO_PRN=""
VTIPO_PRN:=MENU_PRN("LOCA_01")
IF EMPTY(VTIPO_PRN)
FECHA()
ENDIF
SET CURSOR OFF
fh1:= fcreate("LOCA_01.PRN")
fh2:= fcreate("LOCA_01.OEM")
fh3:= fcreate("LOCA_01.ANS")
VX=1
VPAG=1
VTOT_0001=0
VTOT_0002=0
VSAI_DA="S"
IF QFAZ="GEN"
SELE 1
SET ORDER TO 2
GOTO TOP
IF VGRUP>1
SEEK VGRUP1[VGRUP]
ENDIF
VQUEBRA_2=QGEN1(1->GENERO)
ENDIF
DO WHILE QFAZ="GEN" .AND. (1->(!EOF()))
IF VX=1
fwrite(fh1,(&(23->PN12)))
fwrite(fh1,(&(23->PENF)))
VTIT:=CENTIT3(VYFAN,"","P gina: "+STRZERO(VPAG,4,0),90+(IF(VANT=.T.,16,0)))
fwrite(fh1,VTIT+CRLF)
VTIT:=CENTIT3(VYFAN,"","P gina: "+STRZERO(VPAG,4,0),80+(IF(VANT=.T.,16,0)))
fwrite(fh2,VTIT+CRLF)
fwrite(fh3,VTIT+CRLF)
IF VQFAZ=" "
PRINTIN3(" "+(IF(VANT=.T.,SPACE(8),""))+"Acervo de T¡tulos "+(IF(VANT=.T.,SPACE(8),""))+"Data: "+DTOC(DATE())+CRLF)
// PADL(RTIM(PADC(,(80+(IF(VANT=.T.,16,0))))+PADL(
ELSE
PRINTIN3(" "+(IF(VANT=.T.,SPACE(8),""))+PADR("Acervo de T¡tulos ("+ALLTRIM(WPROD2[OP_C])+")",37)+(IF(VANT=.T.,SPACE(8),""))+"Data: "+DTOC(DATE())+CRLF)
ENDIF
IF EMPTY(ALLTRIM(VQUEBRA_2))
PRINTIN3(PADC("Gˆnero n„o definido (em branco).",80+(IF(VANT=.T.,16,0)))+CRLF)
ELSE
PRINTIN3(PADC(ALLTRIM(VQUEBRA_2),80+(IF(VANT=.T.,16,0)))+CRLF)
ENDIF
PRINTIN3(REPL("-",80+(IF(VANT=.T.,16,0)))+CRLF)
PRINTIN3("C¢digo T¡tulo da c¢pia Promo‡„o Interpreta‡„o"+(IF(VANT=.T.," C¢digo anterior",""))+CRLF)
PRINTIN3(REPL("-",80+(IF(VANT=.T.,16,0)))+CRLF)
fwrite(fh1,(&(23->TENF)))
VPAG=VPAG+1
VX=07
ENDIF
IF VCPODE1(VQFAZ,(1->COD_TIT))=.T.
SELE 2
SET ORDER TO 1
SEEK STRZERO((1->COD_TIT),5,0)
DO WHILE (2->COD_T)=(1->COD_TIT)
IF VCPODE2(VQFAZ,(2->PRODUTO))=.T.
VPRO:=QPROM1(1->PROMOCAO)
VTIT:=PADR(1->TITULO,46)
PRINTIN3(" "+(2->CODIGO)+" "+VTIT+" "+VPRO+" "+SUBSTR(VQ_INTER(2->PORTUGUES,.F.),1,13)+(IF(VANT=.T.," "+PADC(2->N_ANT,15),""))+CRLF)
VTOT_0001=VTOT_0001+1
VTOT_0002=VTOT_0002+1
VX=VX+1
ENDIF
VQREC=RECNO()
MYMETER(VQREC,VLAST)
SKIP
ENDDO
ENDIF
SELE 1
SKIP
IF !(VQUEBRA_2=QGEN1(1->GENERO))
IF VGRUP=1
IF (2->(!EOF()))
TOTALIZA(2,VTOT_0001,VTOT_0002,80)
ENDIF
VTOT_0001=0
VX=1
VQUEBRA_2=QGEN1(1->GENERO)
ELSE
TOTALIZA(2,VTOT_0001,VTOT_0002,80)
EXIT
ENDIF
ENDIF
IF VX>56 .OR. (1->(EOF()))
IF (1->(EOF()))
TOTALIZA(2,VTOT_0001,VTOT_0002,80)
ELSE
TOTALIZA(1,VTOT_0001,VTOT_0002,80)
VTOT_0001=0
ENDIF
ENDIF
ENDDO
fwrite(fh1,(&(23->TENF)))
fwrite(fh1,(&(23->PN10)))
fwrite(fh1,CHR(12))
fwrite(fh3,CHR(12))
FOR I=1 TO 5
CLOSE I
NEXT
fclose(fh1)
fclose(fh2)
fclose(fh3)
IF VTIPO_PRN = "T"
IMP_TELA("LOCA_01",120)
ELSE
IF (23->PORTA)=0
IF SUBSTR(23->IMPLOCAL,1,3)="C:\"
COPY FILE("LOCA_01.PRN") TO (ALLTRIM(23->IMPLOCAL)+"\LOCA_01.PRN")
ELSE
VIMP="COPY LOCA_01.PRN "+ALLTRIM(23->IMPLOCAL)+" > NUL"
RUN (VIMP)
ENDIF
ELSE
IF PRINTER((23->PORTA))
COPY FILE("LOCA_01.PRN") TO ("LPT"+STR(23->PORTA,1,0))
ENDIF
ENDIF
ENDIF
DELETE FILE("TITUL000.NTX")
FECHA()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.
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.

