Rapaz... eu não tinha percebido q postei novamente a mensagem inicial.... Deve ter sido qdo fui alterar o Título do Tópico para Resolvido...
Bom vou tentar apagar esta postagem acidental... mas esta tudo ok... obrigado a equipe de moderadores, sempre cuidando para o bom andamento do Fórum....
Outra coisa já q entrei novamente neste tópico, aproveito novamente para agradecer a todos e salientar q meu sistema ficou definido usando a Função PesqByte q esta na seção de Código Fontes postada pelo colega Marcelo Clipper, achei mais de acordo com minha necessidades, mas lembro q tivemos para quem estiver lendo, várias idéias legais aki postada pelos colegas, inclusive um exemplo tb funcional postado pelo colega Andril.
Té + Povo
Sucesso!!! :)Pos
MEMOREAD e STRTRAN não estão Funcionando...
Moderador: Moderadores
MEMOREAD e STRTRAN não estão Funcionando...
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: MEMOREAD & STRTRAN não estão Funcionando...
Pessoal reabri o tópico devido a Função PesqByte não estar funcionando qdo compilada no xHB, e por este ser uma área Clipper e a função do Andril praticamente ter dado certo, reabro aki na seção Clipper, para ver se alguém pode me ajudar, pq a idéia do Andril esta legal tb, o unico porém é q não consigo utilizar a função sem bagunçar o Gabarito original, ou seja, toda vez q vou utilizar num gabarito tenho q saber se o tamanho do campo estoura os espaços do Gabarito ou não.
Alguém tem alguma idéia.
Grato
Alguém tem alguma idéia.
Grato
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á
MEMOREAD & STRTRAN não estão Funcionando...
Fladimir, mesmo eu ter participado neste tópico (e de forma bem atuante) notei que você não citou nem uma única vez a base do meu fundamento. O que deduzo que você talvez não me entendeu. Como você solicitou ajuda vou tentar me explicar novamente, mas antes preciso saber:toda vez q vou utilizar num gabarito tenho q saber se o tamanho do campo estoura os espaços do Gabarito ou não
1. Esse arquivo modelo, matriz ou gabarito como você o titulou; precisa ser exibido em tela para o usuário ?
2. Se precisar mostrar, não seria questão de construir uma sequência de SAY conforme o layout ou até mesmo criar um segundo arquivo de layout para ser exibido e outro para ser manipulado ?
3. Na minha mensagem viewtopic.php?f=1&t=7919&st=0&sk=t&sd=a&start=15#p44381 você entendeu, que a minha indicação era você eliminar o espaço no arquivo gabarito conforme o tamanho de cada campo ?. Daí você SEMPRE iria utilizar (na hora de impressão) as funções PADL(String,Tamanho_do_campo) e desta forma não precisa verificar a toda hora se o campo for maior ou não.
Eu acho que não tem como não dar certo, se você mudar o arquivo matriz (ou gabarito), claro que este (sem os espaços que cada campo ocupa) não daria para mostrar em tela. Aliás até daria, se você substituisse as tags por espaços em brancos e dessa forma evitaria ter um segundo arquivo (um para mostrar e outro para manipular durante a impressão. Então a idéia final seria usar um arquivo apenas.
Você quer postar parte do seu código de forma que possamos ver e fazer testes. Seria mais fácil de exemplificar você passaria a perceber em exemplo o que eu me refiro.
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: MEMOREAD & STRTRAN não estão Funcionando...
Primeiramente, obrigado pela sua atenção e dedicação colega Pablo, e permita-me, antes de discutirmos um desabafo, desde q comecei, acredito q como a maioria do fórum ou muitos, tive q se virar, correr atrás...
... no quesito cálculos sempre me dei bem, agora qdo envolve manipulação de arquivos tipo texto, impressora e vídeo, sempre bato a cabeça, e na verdade eu não entendi muito bem ou quase nada do q vc explicou...
... vou tentar repassar do meu jeito espero q vc entenda e possa ajudar, ou estou frito, rsrsrs...
Sempre achei e ainda acho o Maligno, vc, o Leo, Toledo, Vagner e muitos outros aqui do fórum dos quais tive e tenho o prazer de acompanhar algumas discussões um nível muito elevado. Espero q algum dia consiga galgar alguns degrais de conhecimento e estar conversando ao nível de vcs....
Mas como ainda sou um mero mortal... vamos lá....
Então esse arquivo modelo q contem as TAGs ele varia muito de cliente para cliente, pois dependendendo do q o cliente quer imprimir eu edito o1. Esse arquivo modelo, matriz ou gabarito como você o titulou; precisa ser exibido em tela para o usuário ?
arquivo na hora e acrescento texto, mudo de lugar as TAGs para poder sair de acordo com algum papel pré-formatado q ele tenha tipo um boleto pré-impresso ou uma promissória mandada fazer na gráfica e assim por diante... e o q é exibido na tela é o resultado já com as TAGs substituidas...
Isso é interessante, pq ai não preciso ficar mudando o código de cliente para cliente.
Abaixo vou colocar o jeito q estava funcionando
Código: Selecionar todos
Use Clientes alias Clientes Shared New
set device to printer
set printer to cArq
.
.
.
If File("base.txt")
FileCopy("base.txt","base.tmp")
TxtBase := "base.tmp"
* Substitui TAGs pelos dados da empresa q busca em um determinado DBF
* Caso nao tiver uma TAG no TXT não troca nada e se tiver uma TAG no TXT q não tenha aki no código...
* ... vai ficar sobrando como se fosse um texto do layout mesmo
PesqByte(TxtBase,"@empresa",Emp->NOME)
PesqByte(TxtBase,"@endemp",ALLTRIM(Emp->ENDERECO)+Emp->NUMERO)
PesqByte(TxtBase,"@cidaemp",Emp->CIDADE)
PesqByte(TxtBase,"@estadoemp",Emp->UF)
PesqByte(TxtBase,"@foneemp",Emp->TELEFONE)
* Substitui as TAGs pelos dados do cliente
PesqByte(TxtBase,"@codcli",Clientes->CODIGO)
PesqByte(TxtBase,"@nomecli",left(alltrim(Clientes->NOME),32))
PesqByte(TxtBase,"@endereco",Clientes->ENDERECO)
PesqByte(TxtBase,"@bairro",Clientes->BAIRRO)
PesqByte(TxtBase,"@cidade",Clientes->CIDADE)
PesqByte(TxtBase,"@estado",Clientes->ESTADO)
PesqByte(TxtBase,"@cep",Clientes->CEP)
PesqByte(TxtBase,"@telefone",Clientes->TELEFONE)
PesqByte(TxtBase,"@dtnasc",dtoc(Clientes->nascimento))
* Dados da Venda
PesqByte(TxtBase,"@venda",cVenda)
PesqByte(TxtBase,"@data", DATE(), )
PesqByte(TxtBase,"@vcto",dtoc(dVenc))
PesqByte(TxtBase,"@parcela",str(nParc,2)+"/"+transform(nParcelas,"@B 99"))
PesqByte(TxtBase,"@valor",transform(nValor,"@E 999,999.99"))
ArqGer:=MemoRead("base.tmp")
Aviso("Aguarde... Gerando o arquivo para impressao.","W+*/R")
Set Print On
Set Device to Printer
SetPRC(0,0)
TotLinhas:=MlCount(ArqGer,150)
lLinha:=0
inicio :=1
For inicio:=1 to TotLinhas
If lLinha>=60
Eject
lLinha:=0
End if
Imp:=Memoline(ArqGer,150,local3)
@ lLinha,0 Say trim(imp)
lLinha++
Next
Endif
.
.
.
/* Funcao para Trocar Strings em qualquer arquivo *
Pesquisa a existencia de um determinado texto dentro de um arquivo
O arquivo pode ter qualquer extensao (prg,exe,com,dll,txt,etc...)
Parametros
cArq = Nome do arquivo a ser pesquisado
cPesq = Cadeia a ser pesquisada
cTroca = Caso seja informado ao encontrar a sequencia sera feita a troca
Obs : Se a nova string for menor que a pesquisada entao a diferenca
: sera preenchida com espacos
Retorno :
Retorna a quantidade de ocorrencias
Em caso de erro retorna -1, -2 ou -3 dependendo do erro
Alterada em : 11.02.2008 as 14:29 horario de Brasilia
A pesquisa agora e feita do 1º byte em diante
A funcao agora nao diferencia maisusculas de minusculas
Obs : Na pesquisa tanto faz se e maiuscula ou minuscula
porem no caso da nova string vale como ela foi passada
Ex : Se a nova string for "BaRtOlomEU" assim ela sera gravada
Autor..........: Marcelo (Clipper)
Contribuicoes : Maligno e Eolo
*/
*------------------------------------*
Function PesqByte(cArq,cPesq,cTroca)
*------------------------------------*
if cArq=nil .or. cPesq=nil // Falta de parametros
return(-1)
endif
cPesq=alltrim(cPesq)
if cTroca<>nil
cTroca=Alltrim(cTroca)
if len(cPesq)>len(cTroca) // a nova string e menor que pesquisada entao
espacos=len(cPesq)-len(cTroca) // a diferenca sera preenchida com espacos
cTroca=cTroca+space(espacos)
endif
endif
if !File(cArq) // Arquivo nao encontrado
return(-3)
endif
pl:=upper(substr(cPesq,1,1))
hand:=fopen(cArq,2)
Byte:=1
Tamanho:=Fseek(hand,0,2)
posiciona:=Fseek(hand,0,0)
conta:=0
do whil .T.
lebyte:=freadstr(hand,1)
if upper(lebyte)=pl
posiciona:=fseek(hand,-1,1)
leu:=freadstr(hand,len(cPesq))
if upper(leu)=upper(cPesq)
conta++
if cTroca<>nil
fseek(hand,-len(cPesq),1)
fwrite(hand,cTroca,len(cTroca))
endif
endif
endif
byteatual:=fseek(hand,1,-1)
byte++
if byte>=tamanho-len(cPesq)+1
fclose(hand)
return(conta)
endif
enddo
Vou disponibilar aki para baixar 4 Modelos de clientes diferentes do BASE.TXT q na verdade como disse no início varia de cliente para cliente.
Agora eu tive q mudar para usar a função q entitulei de LayoutTXT do colega Andril para manter a compatibilidade com o xHarbour, ou seja, a PesqByte funciona no clipper mas no xHB não consegui fazer funcionar, e a do colega Andril esta funcionando tanto no Clipper qto no xHB, mas tem agora somente q resolver a questão dos espacamentos, ou melhor, não bagunçar o arquivo gerado, manter os mesmos posicionamentos do texto e do local das TAGS como no arquivo BASE.TXT
Abaixo como coloquei agora o código trocado para utilizar a função LayoutTXT.
Código: Selecionar todos
Use Clientes alias Clientes Shared New
set device to printer
set printer to cArq
.
.
.
If File("base.txt")
FileCopy("base.txt","base.tmp")
TxtBase := "base.tmp"
pesq:= { "@empresa", "@endemp", "@cidaemp", "@estadoemp", "@foneemp", ;
"@codcli", "@nomecli", "@endereco", "@bairro", ;
"@cidade", "@estado", "@cep", "@telefone", "@dtnasc", ;
"@venda", "@data", "@vcto", "@parcela", "@valor" }
Troc:= { Emp->Nome, Emp->Endereco+Emp->Numero, Emp->Cidade, Emp->Estado, Emp->Telefone,;
Clientes->Codigo, Left(Alltrim(Clientes->Nome),32), Clientes->Endereco, Clientes->Bairro, ;
Clientes->Cidade , Clientes->estado, Clientes->CEP, Clientes->Telefone, dtoc(Clientes->Nascimento), ;
cVenda, DATE(), dtoc(dVenc), str(nParc,2)+"/"+transform(nParcelas,"@B 99"), transform(nValor,"@E 999,999.99") }
LayoutTXT(TXTBase, pesq, troc, "Retorno")
ArqGer:=memoread("Retorno")
Aviso("Aguarde... Gerando o arquivo para impressao.","W+*/R")
Set Print On
Set Device to Printer
SetPRC(0,0)
TotLinhas:=MlCount(ArqGer,150)
lLinha:=0
inicio :=1
For inicio:=1 to TotLinhas
If lLinha>=60
Eject
lLinha:=0
End if
Imp:=Memoline(ArqGer,150,local3)
@ lLinha,0 Say trim(imp)
lLinha++
Next
Endif
.
.
.
/* Funcao para trocar Strings em Layouts TXT (LayoutTXT)
Autor..: Andril
COMO USAR: o arquivo BOLETO.TXT deve ser preenchido assim
@nome35
@codigo09
@cidade35
ONDE: @nome ‚ o campo a ser alterado
35 ‚ a largura da formatacao do campo
NOTA: se a largura for de 1 a 10 preencher sempre com 2 digitos
@sexo01
IMPRESSAO: @nome35# onde # indica que deve ser feita a impressao desta
palavra em CONDENSADO
@nome35$ onde $ indica que deve ser feita a impressao em
ESPANDIDO
Pode definir uma mascara para NEGRITO como % e alterar o IF no
codigo para permiti-la
*/
*------------------------------------------------------------------------
Function LayoutTxt(cArqLay, aElemento, aConteudo, cArqRet)
* cArqLay = Nome do Arquivo TXT q contem o Layout
* aElemento = Array Multidimensional com os elementos a serem trocados
* aConteudo = Array Multidimensional com o conteudo q ira preencher
* cArqRet = Nome do Arquivo de Retorno com as trocas realizadas
//--aqui sao os elementos que devem serem procurados no arquivo BOLETO.TXT
elemento:=aElemento
//--aqui o array que fornece os dados conforme a posicao ordinal do array acima
conteudo:= aConteudo
//--le o arquivo de Layout
string=memoread(cArqLay,80)
linhas=mlcount(string,80)
//--inicia o varredura no arquivo
for i = 1 to linhas
num_elemento=1
do while num_elemento<=len(elemento)
if at(elemento[num_elemento],memoline(string,80,i))>0
//--se encontrou a string na linha entra aqui
//--obtem a coluna inicial
comeco_col=at(elemento[num_elemento],memoline(string,80,i))
//--rotina para obter o spaco de formatacao
if ISDIGIT(substr(memoline(string,80,i),comeco_col+len(elemento[num_elemento]),1))=.F.
//--se apos a chave existir um espaco indica que nao ha formatacao feita pelo
//--usuario
string=strtran(string,elemento[num_elemento],conteudo[num_elemento])
else
comeco_col=len(substr(memoline(string,80,i),comeco_col,len(elemento[num_elemento])+1))
posicao=1
do while substr(memoline(string,80,i),comeco_col,posicao)$"0123456789"
posicao++
enddo
//--aqui defini a impressao no modo normal
modoimpbasico="chr(18)"
//--aqui defini conforme esta no arquivo de Layout
modoimpressao=""
if substr(memoline(string,80,i),comeco_col+posicao,1)="$"
//--expandido
modoimpressao="chr(14)"
elseif substr(memoline(string,80,i),comeco_col+posicao,1)="#"
//--condensado
modoimpressao="chr(15)"
endif
stringtamanho=substr(memoline(string,80,i),comeco_col,posicao)
tamanhofinal=val(substr(memoline(string,80,i),comeco_col,posicao))
string=strtran(string,elemento[num_elemento]+stringtamanho+;
if(!empty(modoimpressao),substr(memoline(string,80,i),comeco_col+posicao,1),""),;
padr(if(!empty(modoimpressao),&modoimpressao+conteudo[num_elemento]+&modoimpbasico,conteudo[num_elemento]),tamanhofinal,"+"))
endif
endif
num_elemento++
enddo
next
*num_elemento++
*enddo
memowrit(cArqRet,string)
return
Grato...
:)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á
MEMOREAD & STRTRAN não estão Funcionando...
Obrigado pelos elogios Fladimir, pelo que me consta você também é um colega a altura de todos, porque ajuda aos colegas de forma muito atuante. Bom com respeito ao seu projeto me permita fazer algumas observações:
1. Notei que você utilizou dois vetores no seu código versão xHarbour. O que acho bem mais prático para processar, inclusive você poderia utilizar matrizes multidimensionais para comportar o processamento de vários formulários ao mesmo tempo, mas isso jha é outra questão. Você disse que você gostaria de não precisar mudar o código conforme a necessidade de cada cliente. Notei que dentro do seu código você define o nome das tags, o que contraria a flexibilidade que poderia ter para cada caso. Então sugiro você criar esses dois vetores (nomes das tags e contéudo das tags) através do conteúdo de um DBF intermediário onde conteria apenas os campos a serem pesquisados/substituídos e com o contéudo dos registros. Daí você associaria o nomes dos campos como nome das tags (no seu exemplo, criando o vetor pesq{}) e o conteúdo das tags conforme o conteúdo dos campos (no seu exemplo, criando o vetor troc{}). Dessa forma você até pode fazer com que o cliente escolha quais campos do seu banco de dados CLIENTES.DBF irão ser utilizados para substituição de campso do seu formulário. Daí o usuário, através de menu ou tBrowse pode selecionar quais campos do arquivo clientes vai utilizar e quais registros desse arquivo clientes.dbf vai utilizar. Com isso você poderia gerar um dbf secundário, digamos com o nome DADOS.DBF, onde apenas irão os campos e registros pre-selecionados pelo usuário.
2. Outra coisa que notei você deveria garantir o tamanhop FIXO sobre o conteúdo de cada tag. Isso você pode fazé-lo durante a criação do arquivo secundário DADOS.DBF. Seria conveniente que nesse arquivo DADOS.DBF todos os campos sejam do tipo caracter e com o tamanho FIXO conforme o que foi pre-estabelecido no formulário layout. Caso você não opte pela criação do DADOS.DBF, você faria no momento da criação do vetor troc{}, da seguinte forma:
troc:={}
aadd(troc,padr((emp->nome),35))
aadd(troc,padr(alltrim(Emp->Endereco)+str(Emp->Numero)),60))
aadd(troc,padr((emp->cidade),35))
Veja o valor 35 e 60 em destaque, seria o tamanho FIXO que você deve manter para que na hora da substituição das tags não venham a disposicionar os caracteres no formulário.
3. Veja agora o que eu fiz no seu arquivo de layout (base0.txt), perceba que eu eliminei os espaços que cada campo ocupavam no formulário e ainda descontei o tamanho do nome da tags (para o caso do @empresa removí mais 8 espaços). Sei que o seu arquivo de layout parece estar tudo desalinhado, mas se você substituir as tags por espaços ele volta a exibí-lo como se fosse um formulário vazio.
Só não entendo, o que estaria acontecendo em xHarbour para que não funcione. Está dando alguma mensagem de erro ?. É alguma função que o xHarbour se comporta diferente ou até inexistente ?. Digo isto, porque eu ainda usaria o pesqbyte do seu código versão Clipper.
Bom não sei se conseguí fazer-me entender, caso houver dúvidas estou disposto a responder-las.
1. Notei que você utilizou dois vetores no seu código versão xHarbour. O que acho bem mais prático para processar, inclusive você poderia utilizar matrizes multidimensionais para comportar o processamento de vários formulários ao mesmo tempo, mas isso jha é outra questão. Você disse que você gostaria de não precisar mudar o código conforme a necessidade de cada cliente. Notei que dentro do seu código você define o nome das tags, o que contraria a flexibilidade que poderia ter para cada caso. Então sugiro você criar esses dois vetores (nomes das tags e contéudo das tags) através do conteúdo de um DBF intermediário onde conteria apenas os campos a serem pesquisados/substituídos e com o contéudo dos registros. Daí você associaria o nomes dos campos como nome das tags (no seu exemplo, criando o vetor pesq{}) e o conteúdo das tags conforme o conteúdo dos campos (no seu exemplo, criando o vetor troc{}). Dessa forma você até pode fazer com que o cliente escolha quais campos do seu banco de dados CLIENTES.DBF irão ser utilizados para substituição de campso do seu formulário. Daí o usuário, através de menu ou tBrowse pode selecionar quais campos do arquivo clientes vai utilizar e quais registros desse arquivo clientes.dbf vai utilizar. Com isso você poderia gerar um dbf secundário, digamos com o nome DADOS.DBF, onde apenas irão os campos e registros pre-selecionados pelo usuário.
2. Outra coisa que notei você deveria garantir o tamanhop FIXO sobre o conteúdo de cada tag. Isso você pode fazé-lo durante a criação do arquivo secundário DADOS.DBF. Seria conveniente que nesse arquivo DADOS.DBF todos os campos sejam do tipo caracter e com o tamanho FIXO conforme o que foi pre-estabelecido no formulário layout. Caso você não opte pela criação do DADOS.DBF, você faria no momento da criação do vetor troc{}, da seguinte forma:
troc:={}
aadd(troc,padr((emp->nome),35))
aadd(troc,padr(alltrim(Emp->Endereco)+str(Emp->Numero)),60))
aadd(troc,padr((emp->cidade),35))
Veja o valor 35 e 60 em destaque, seria o tamanho FIXO que você deve manter para que na hora da substituição das tags não venham a disposicionar os caracteres no formulário.
3. Veja agora o que eu fiz no seu arquivo de layout (base0.txt), perceba que eu eliminei os espaços que cada campo ocupavam no formulário e ainda descontei o tamanho do nome da tags (para o caso do @empresa removí mais 8 espaços). Sei que o seu arquivo de layout parece estar tudo desalinhado, mas se você substituir as tags por espaços ele volta a exibí-lo como se fosse um formulário vazio.
Só não entendo, o que estaria acontecendo em xHarbour para que não funcione. Está dando alguma mensagem de erro ?. É alguma função que o xHarbour se comporta diferente ou até inexistente ?. Digo isto, porque eu ainda usaria o pesqbyte do seu código versão Clipper.
Bom não sei se conseguí fazer-me entender, caso houver dúvidas estou disposto a responder-las.
- Anexos
-
BASE0.TXT- (2.28 KiB) Baixado 111 vezes
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: MEMOREAD & STRTRAN não estão Funcionando...
Sim Pablo essa questão de criar um DBF intermediario para as TAGS e Conteudo já me ocorreu, e pretendo futuramente fazer, mas de imediato preciso é compatilibizar e isto esta desgastando um pouco, o bom mesmo era a PesqByte q teve melhores resultados, ela não apresentou erros, mas apenas não gera o arquivo q nem no clipper e não consegui compreender o pq, se vc depois quiser testar, basta pegar do exemplo anterior onde utilizava ela e testar e vai entender o q eu digo.
Agora qto a LayoutTXT q esta ok nas duas vou ter q fazer manualmente, mas não acredito q vá ficar q nem a PesqByte tipo servindo para qualquer Layout, a não ser q eu faça q nem vc citou e disse q já me ocorreu através de um DBF intermediario.
Devido a urgência vou fazer manualmente para um cliente X em questão e depois vou dar mais umas tentadas na PesqByte, caso não consiga vou fazer a idéia do DBF intermediário q é um pouco mais demoradinha, mas vai ficar bom tb.
Grato a atenção e ajuda
Att.
:)Pos
Agora qto a LayoutTXT q esta ok nas duas vou ter q fazer manualmente, mas não acredito q vá ficar q nem a PesqByte tipo servindo para qualquer Layout, a não ser q eu faça q nem vc citou e disse q já me ocorreu através de um DBF intermediario.
Devido a urgência vou fazer manualmente para um cliente X em questão e depois vou dar mais umas tentadas na PesqByte, caso não consiga vou fazer a idéia do DBF intermediário q é um pouco mais demoradinha, mas vai ficar bom tb.
Grato a atenção e ajuda
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á
MEMOREAD e STRTRAN não estão Funcionando...
Fladimir, olhou o meu arquivo BASE0.TXT ?
Qual arquivo "retorno" ? Será que você não está dando o mesmo nome que o arquivo que está em aberto ? Digo por causa do SET PRINT to arquivo... ?ela não apresentou erros, mas apenas não gera 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.
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.
