Agora a mesma função apenas mudando de compilador tem retornos diferentes, no Clipper esta Ok, agora no xHarbour não deu certo, alguém poderia ajudar...
Grato...
Segue abaixo trecho q da para testar...
Código: Selecionar todos
Proc Main
If File("Carne.TXT")
FileCopy("Carne.TXT", "Carne.TMP")
ArqTxt := "carne.tmp"
PesqByte(ArqTxt,"@empresa", "Loja Mae Joana")
PesqByte(ArqTxt,"@endemp", "Rua das Amoreiras, 2040")
PesqByte(ArqTxt,"@cidaemp", "Sertaozinho")
PesqByte(ArqTxt,"@estadoemp", "MT")
PesqByte(ArqTxt,"@foneemp", "65-3331-7070")
PesqByte(ArqTxt,"@codcli", "04152")
PesqByte(ArqTxt,"@nomecli", "Jose Armando Siqueira")
PesqByte(ArqTxt,"@endereco", "Rua Cel. Ponciano, 123")
PesqByte(ArqTxt,"@bairro", "Centro")
PesqByte(ArqTxt,"@cidade", "Sertaozinho")
PesqByte(ArqTxt,"@estado", "MT")
PesqByte(ArqTxt,"@cep", "85456-547")
PesqByte(ArqTxt,"@telefone", "65-3331-5050")
Else
// Não Gera Carne
Endif
Return
*--------------------------------------------------------------------------*
* 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
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)
// Coloquei para observar como retona diferente algumas variáveis
//cls
//@08,10 say cArq
//@09,10 say cPesq
//@10,10 say lebyte
//@12,10 say pl
//inkey(0)
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
Return
Abaixo segue td compactado com o executavel compilado em Clipper, mas tb com o .BC para quem quiser testar no xharbour.


