PROCURAR PALAVRA EM ARQUIVO DE TEXTO

CARINHENA 18/01/2005 10:31:39
#61532
Pessoal, eu tenho um arquivo txt que tem dois dados por linha.
Dessa forma:

c:\svchost,c:\svchost.exe
c:\windows,c:\windows.exe

Ou seja, antes da virgula mostra como o arquivo fica após ser renomeado, e depois da virgula, fica o nome original do arquivo.

Então o programa mostra em listbox o nome dos arquivos renoameados.
Como eu faço pra "comparar", ou seja, quando eu clico em cima do "c:\svchost" ele procure no arquivo de texto antes da primeira virgula a palavra "c:\svchost" e me mostre em um textbox o segundo item após a virgula ?

exemplo:
Clico em "c:\svchost", o programa procura essa mesma string no texto e me retorna em um text box a posição original dele (nome após a virgula) que no caso é: c:\svchost.exe

alguem pode dar uma luz?
Procurei pelo fórum, dicas e download e não encontrei nada que fosse almenos parecido...



USUARIO.EXCLUIDOS 18/01/2005 10:53:41
#61536
Private Sub Command1_Click()
Open "c:    este.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, coringa
If InStr(coringa, Text1) <> 0 Then
ReDim divid(1) As String
divid = Split(coringa, ",")
Text1 = divid(1)
Exit Do
End If
Loop
Close #1
End Sub
THIAGO.CESAR 18/01/2005 10:57:28
#61537
Resposta escolhida
Cara, tá quentinha
O Max já tinha feito aqui, mas como eu também já estava fazendo, vou postar também...

Function Correspondente(ByVal Arquivo As String, ByVal Antes As String) As String
Dim i%, Linha$, a$, b$
i = FreeFile
Open Arquivo For Input As i
Do While Not EOF(i)
Line Input #i, Linha
a = VBA.Left(Linha, InStr(Linha, ",") - 1)
b = VBA.Right(Linha, InStr(Linha, ",") - 1)
If LCase(a) = LCase(Antes) Then Correspondente = b: Exit Function
Loop
Close i
Correspondente = Empty
End Function


Chame assim: Correspondete(CaminhoDoArquivo,CriterioaProcurar)
USUARIO.EXCLUIDOS 18/01/2005 10:58:29
#61538
Ôpa! Coloquei um textbox pro usuário colocar o pedaço de nome do arquivo e a rotina retorna o nome completo no próprio textbox. Façaí suas adaptações, pois a lógica é essa (usando split).
USUARIO.EXCLUIDOS 18/01/2005 11:00:10
#61539
OOOOU com Left/Right, como fez o Thiago.

Neston e VB. São mil e uma maneiras de fazer!!!
USUARIO.EXCLUIDOS 18/01/2005 11:04:57
#61541
Puts!

A gente tratando de otimização de código ali em cima e eu fazendo caquinha aqui embaixo...

Coloquei um Redim dentro do loop. Isso quer dizer que ele vai refazer o array "divid" e apagar o seu conteúdo a cada loopada. Não precisa. Tira ele do loop e coloca lá na primeira linha da rotina, porque se você pegar uma lista com uns 500 mil registros, o treco vai começar a ficar lerdo.
GABRIEL.LOGAN 18/01/2005 11:52:28
#61551
Amigo CARINHENA, acabei de postar um código fonte que acredito eu que vai resolver sua dúvida e você vai gostar. O link é: www.vbmania.com.br/vbmdetail.php?varID=2298

Qualquer dúvida no código favor comunicar.
CARINHENA 18/01/2005 14:54:17
#61595
Antes de mais nada meus sinceros agradecimentos aos companheiros que me ajudaram
O seguinte código deu mais certo:
Dim coringa As String
Open App.Path & "\Configurações\Quarentena.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, coringa
If InStr(coringa, CaminhoArquivoQuarentena) <> 0 Then
ReDim divid(1) As String
divid = Split(coringa, ",")
Text5 = divid(1)
Exit Do
End If
Loop
Close #1

Mas, caso eu queira apagar a linha que foi encontrada, é possivel?
Tentei usando alguns comandos, mas, não consegui...
Exemplo:
O código me voltou: c:\Svchost.exe
Então no final ele apague essa linha toda (e somente essa linha).
No caso:
c:\svchost,c:\svchost.exe

é possivel fazer isso?
THIAGO.CESAR 18/01/2005 15:03:21
#61597
Não sei se é a melhor forma de fazer, mas...

Faça uma adaptação para que o código acima leia todas as linhass e vá salvando linha por linha numa variável, exceto a que foi localizada, depois você salva o arquivo com o conteúdo da variável.
CARINHENA 18/01/2005 16:12:51
#61611
Thiago César

Veja bem, quem faz os "logs" é um outro exe do meu programa.
Então, pode haver até mais de 40 linhas... então, não tem como salvar um por um.... perderia muito rendimento.

Ok?

Valeu pela tentativa de ajuda...
Um abraço
THIAGO.CESAR 18/01/2005 16:20:20
#61614
Faça o seguinte (vou usar a minha função porque ja estou mais familiarizado com ela, mas funciona também com a do Max)

Function Correspondente(ByVal Arquivo As String, ByVal Antes As String) As String
Dim i%, Linha$, a$, b$
i = FreeFile
Open Arquivo For Input As i
Do While Not EOF(i)
Line Input #i, Linha
a = VBA.Left(Linha, InStr(Linha, ",") - 1)
b = VBA.Right(Linha, InStr(Linha, ",") - 1)
If LCase(a) = LCase(Antes) Then
Correspondente = b: Exit Function
Else
List1.AddItem linha
End if

Loop
Close i
Correspondente = Empty

'SALVAR O NOVO ARQUIVO
[c]Open Arquivo for output as #1
for i = 0 to list1.listcount -1
print #1, list1.list(i)
next
Close #1[/b]
End Function
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas