Busca String em Arquivo TXT
Moderador: Moderadores
Busca String em Arquivo TXT
Pessoal,
Estou precisando de uma função que localize uma string em um txt, tipo find in files do ultraedit.
A função deve encontrar todas as ocorrência de parte da string informada.
Estou precisando de uma função que localize uma string em um txt, tipo find in files do ultraedit.
A função deve encontrar todas as ocorrência de parte da string informada.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Busca String em Arquivo TXT
Olá Asimoes,
Veja se lhe ajuda:
Veja se lhe ajuda:
Código: Selecionar todos
Param cString, cExt
If Empty( cString )
Alert( "cString não especificada" )
Return Nil
Else
cString := Uppe( cString )
cExt:=If( Empty( cExt ), ".TXT", cExt )
Endi
aArqDir:=Directory( "*"+cExt )
If Len( aArqDir ) = 0
Alert( "Nenhum arquivo "+cExt+" Nessa pasta" )
Return Nil
Endi
aArqDir1:={}
aEncontrou:={}
Aeval( aArqDir, { |arq| AADD( aArqDir1, arq[1] ) } )
For i=1 TO Len( aArqDir1 )
Clear Screen
cArquivo:=aArqDir1[i]
@ 2,2 say "Procurando cString no cArquivo => "+cArquivo
cBuffer := Uppe( MemoRead( cArquivo ) )
If (cString $ cBuffer)
posi:=Ascan( aEncontrou, { |arq| cArquivo==arq[1] } )
If posi=0
AADD( aEncontrou, { cArquivo, 0 } )
nPosi:=Len( aEncontrou )
Endi
Whil (cString $ cBuffer)
cBuffer := StrTran( cBuffer, cString, "", 1, 1 )
aEncontrou[ nPosi,2 ] += 1
Endd
Endi
Next
Clear Screen
If Len( aEncontrou ) != 0
cMsg:=""
aResult:={}
For i=1 To Len( aEncontrou )
cMsg:=Padr( aEncontrou[i,1], 12 )+" => "+StrZero( aEncontrou[i,2], 3 )+" ocorrˆncia(s)"
AADD( aResult, cMsg )
NEXT
nArq=1
Whil nArq!=0
nArq := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aResult, .T.,, nArq )
If nArq!=0
qarq:=ALLTRIM(aEncontrou[nArq,1])
! EDIT &qarq.
Endi
Endd
Else
cMsg:="Não econtrei Nenhuma ocorrência: "+cString+";"+;
"Procurei em todos cArquivos => [*&cExt.]"
Alert( cMsg )
Endi
Clear Screen
Return NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Busca String em Arquivo TXT
Olá!
No tópico Visualizar arquivo no video - vai alem 64k tem um fonte do Rick Spence, levemente modificado.
Este código abre um arquivo .TXT em um TBrowse e permite que o usuário navegue através dele, com possibilidade de busca para a frente e para trás. Veja as funções FrwdSrch() e BkwdSrch().
Já usei e é muito bom. Provavelmente você já conhece e não lembra.
No tópico Visualizar arquivo no video - vai alem 64k tem um fonte do Rick Spence, levemente modificado.
Este código abre um arquivo .TXT em um TBrowse e permite que o usuário navegue através dele, com possibilidade de busca para a frente e para trás. Veja as funções FrwdSrch() e BkwdSrch().
Já usei e é muito bom. Provavelmente você já conhece e não lembra.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
sambomb
- Usuário Nível 3

- Mensagens: 250
- Registrado em: 24 Out 2008 17:02
- Localização: Itaocara - RJ - Brasil
Busca String em Arquivo TXT
Código: Selecionar todos
Function PesquisaEmArquivos( cPesquisa, cPasta, cTipoArquivo)
Local aDir := {}, aResult := {}
Local nCount := 0, nPos := 0, i := 0, j := 0
Local cTxt := ""
//-- Opções padrão
Default cPesquisa := "", cPasta := "C:\", cTipoArquivo := ""
//-- Obter a lista de arquivos em uma determinada pasta, pode ser enviado por exemplo "C:\teste\*.txt" de forma a obter apenas TXT ou então usar o parâmetro cTipoArquivo para isso
aDir := Directory(cPasta)
//-- Rodar todos os arquivos do diretório
For i := 1 to Len(aDir)
//-- Verificar a extensão do arquivo
If Empty(cTipoArquivo) .Or. ( cFileExt(MemoRead(aDir[i,1])) $ cTipoArquivo )
//-- Carregar o arquivo a ser pesquisado
cTxt := MemoRead(aDir[i,1])
//-- Contar o número de aparições da string dentro do arquivo
nCount := StrCharCount(cTxt,cPesquisa)
//-- Se houver alguma aparição da string no arquivo
If nCount > 0
//-- Inicializar em zero para quando trocar o arquivo não gerar erro
nPos := 0
//-- Rodar o arquivo pesquisando a posição de cada aparição
For j := 1 to nCount
//-- Obter a posição da string no arquivo
nPos := At(cPesquisa,cTxt, nPos)
//-- Adicionar para o resultado o nome do arquivo e a posição onde se encontra a string
aAdd(aResult,{aDir[i,1], nPos})
end//For j := 1 to nCount
end//If nCount > 0
end//If Empty(cTipoArquivo) .Or. ( cFileExt(MemoRead(aDir[i,1])) $ cTipoArquivo )
end//For i := 1 to Len(aDir)
Return aResult

Rca Sistemas - Itaocara - RJ
Busca String em Arquivo TXT
Ola Sambomb,
Essas funções:
StrCharCount()
cFileExt()
são de de que lib?
Essas funções:
StrCharCount()
cFileExt()
são de de que lib?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Busca String em Arquivo TXT
Amiguinho,
Faça uma adaptação desta para contar strings em seu codigo:
Faça uma adaptação desta para contar strings em seu codigo:
Código: Selecionar todos
function Ocorrencia(pString,PCHAR)
nString := 0
for I = 1 to len(pString)
if substr(pString,I,1) = PCHAR
nString := nString + 1
endif
next
return nString
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Busca String em Arquivo TXT
Aproveitando...
A muito tempo fiz a função abaixo para ajudar um colega aqui do fórum, ela pesquisa a ocorrência de uma string em qualquer tipo de arquivo e faz a troca por outra caso seja necessário, não importa o tipo de arquivo, pode ser TXT, EXE, DBF, INI, etc. Vale ressaltar que para arquivos grandes a função fica um pouco lenta já que ela faz uma busca byte a byte.
O post original é :
viewtopic.php?f=1&t=7471&start=0&hilit=busca+string
Até logo.
Marcelo
A muito tempo fiz a função abaixo para ajudar um colega aqui do fórum, ela pesquisa a ocorrência de uma string em qualquer tipo de arquivo e faz a troca por outra caso seja necessário, não importa o tipo de arquivo, pode ser TXT, EXE, DBF, INI, etc. Vale ressaltar que para arquivos grandes a função fica um pouco lenta já que ela faz uma busca byte a byte.
Código: Selecionar todos
*** Pesquisa a existência de um determinado texto dentro de um arquivo
*** O arquivo pode ter qualquer extensão
***
*** Parâmetros
*** 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 então a diferença
*** : sera preenchida com espaços
***
*** Retorno :
*** Retorna a quantidade de ocorrências
*** Em caso de erro retorna -1, -2 ou -3 dependendo do erro
***
*** Alterada em : 11.02.2008 as 14:29 horário de Brasília
*** A pesquisa agora e feita do 1º byte em diante
*** A função agora nao diferencia maiúsculas de minusculas
***
*** Obs : Na pesquisa tanto faz se e maiúscula ou minúscula
*** porém no caso da nova string vale como ela foi passada
*** Ex : Se a nova string for "BaRtOlomEU" assim ela sera gravada
***
*** Contribuições : Maligno e Eolo
***
*------------------------------------*
Function PesqByte(cArq,cPesq,cTroca)
*------------------------------------*
if cArq=nil .or. cPesq=nil // Falta de parâmetros
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 então
espacos=len(cPesq)-len(cTroca) // a diferença sera preenchida com espaços
cTroca=cTroca+space(espacos)
endif
endif
if .not. file(cArq) // Arquivo não 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
viewtopic.php?f=1&t=7471&start=0&hilit=busca+string
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)