Código: Selecionar todos
*** 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) // String pesquisada menor que nova string
return(-2)
endif
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 .not. 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
Marcelo
