Avatar billede thomas_yde Nybegynder
09. juni 2004 - 17:58 Der er 7 kommentarer og
1 løsning

Søge i textfiler med VB

Hej eksperter jeg har et lille problem, jeg vil gerne søge efter en string i en text fil og returnere linjenummer etc.
Men jeg har lidt problemer med at krejle hvordan man skal søge efter en string i en string.

min kode er:
Function findSted(logfil,soegeord)
    Dim tmpFSO, linjenr, checkLine
    set tmpFSO = Wscript.CreateObject("Scripting.FileSystemObject")
    If tmpFSO.FileExists(logfil) Then
        linjenr = 0
        set tmpfil = tmpFSO.OpenTextFile(logfil)
        do until LogFil.AtEndOfStream
            checkLine = LogFil.ReadLine()
            '//checkLine skal checkes for om den indeholder soegeord
        loop
        tmpfil.close()
    Else
        findSted = "Der er ingen logs i mappen"
    End If
    set tmpFSO = nothing
End Function
Avatar billede thomas_yde Nybegynder
09. juni 2004 - 18:08 #1
der mangler lige en i= i + 1
men det er lidt ligemeget indtil videre.
Avatar billede joern Nybegynder
09. juni 2004 - 18:15 #2
Hej.

Jeg er ikke så avanceret som dit kodeeksempel viser, og bruger en VB5 enterprise.
I et af mine programmer søger jeg efter tekst, der er indtastet i en tekstfil:

Private Sub knsogen_Click()
  If Len(Dir(labjourfil.Caption)) < 2 Then Exit Sub    'tjekker om filen findes
  txtjour.Text = ""
  If fler = 1 Then GoTo igen
  Open labjourfil.Caption For Input As #5
igen:
    Do While EOF(5) = False
      Line Input #5, satning
        If InStr(satning, txtsogen.Text) > 0 Then
          txtjour.Text = satning
          knsogen.Caption = "&Næste"
          fler = 1
          Exit Sub
        Else
        If EOF(5) = False Then GoTo igen
        Close #5
        MsgBox ("Der er ikke flere forekomster af " & txtsogen.Text & "  Bemærk af søgningen skelner mellem store og små bogstaver!")
        Exit Sub
      End If
    Loop
  Close #5
 
End Sub

Til mulig inspiration :-)

M.v.h.  Jørn
Avatar billede thomas_yde Nybegynder
09. juni 2004 - 19:25 #3
ser det lige igennem :)
Avatar billede thomas_yde Nybegynder
09. juni 2004 - 21:00 #4
Finno, det var den InStr jeg faktisk ledte efter :)
jeg tror det var svaret.

Vil du smide et svar?
Avatar billede thomas_yde Nybegynder
09. juni 2004 - 21:01 #5
SÅ skal jeg nok smide den fulde løsning når den engang bliver færdig
Avatar billede thomas_yde Nybegynder
10. juni 2004 - 18:34 #6
hvis nogle var interesseret i løsningen er den her:
'// Søger i log filerne efter søgeord
atFinde = inputbox("Indtast det ord du vil søge efter")

'//Path = logbiblioteket
'// version 1.0 leder ikke i undermaper
Dim path
path = "S:\Logs\GamleLogs\"

Function loopLogs(path,soegeord)
    Dim folder,files, resultat
    set FSO = WScript.Createobject("Scripting.FileSystemObject")
    set folder = FSO.GetFolder(path)
    set files = folder.Files
    'msgbox "Antal filer: " & files.count
    For Each file in files
        filnavn = file.Name
        'msgbox file.Name
        'msgbox path & filnavn
        tmpString = findSted(path&filnavn,soegeord)
        If tmpString <> "" and tmpString <> "¤2" and tmpString <>  "Der er ingen logs i mappen" Then
            If resultat = "" Then
                resultat = "Du søgte efter: "& soegeord&vbCrlf
                msgbox tmpString
            End If
            resultat = resultat & "Fundet i: " & filnavn & vbCrlf
            '//Skriver resultatet ind           
        End If
    Next
    If resultat = "" Then
        resultat = "sogeordet blev ikke fundet"
    End If
    '//oprydning
    loopLogs = resultat
    set folder = nothing
    set files = nothing
    set FSO = nothing
End Function


Function findSted(logfil,soegeord)
    Dim tmpFSO, linjenr, checkLine, fundet
    Dim linjeNumre
    fundet = false
    set tmpFSO = Wscript.CreateObject("Scripting.FileSystemObject")
    If tmpFSO.FileExists(logfil) Then
        linjenr = 1
        set tmpfil = tmpFSO.OpenTextFile(logfil)
        do until tmpfil.AtEndOfStream
            checkLine = tmpfil.ReadLine()
            '//checkLine skal checkes for om den indeholder soegeord
            If InStr(checkLine,soegeord)>0 Then
                linjeNumre = linjeNumre & linjenr&","
                fundet = true
            End If
            linjenr = linjenr +1
        loop
        tmpfil.close()
        If fundet Then
            findSted = linjeNumre
        Else
            findSted = "¤2"
        End If
    Else
        findSted = "Der er ingen logs i mappen"
    End If
    set tmpFSO = nothing
End Function


joern vil du ligge et svar?
Avatar billede thomas_yde Nybegynder
10. juni 2004 - 18:36 #7
'// Søger i log filerne efter søgeord
atFinde = inputbox("Indtast det ord du vil søge efter")

'//Path = logbiblioteket
'// version 1.0 leder ikke i undermaper
Dim path
path = "S:\Logs\GamleLogs\"

msgbox loopLogs(path,atFinde)

Function loopLogs(path,soegeord)
    Dim folder,files, resultat
    set FSO = WScript.Createobject("Scripting.FileSystemObject")
    set folder = FSO.GetFolder(path)
    set files = folder.Files
    'msgbox "Antal filer: " & files.count
    For Each file in files
        filnavn = file.Name
        'msgbox file.Name
        'msgbox path & filnavn
        tmpString = findSted(path&filnavn,soegeord)
        If tmpString <> "" and tmpString <> "¤2" and tmpString <>  "Der er ingen logs i mappen" Then
            If resultat = "" Then
                resultat = "Du søgte efter: "& soegeord&vbCrlf
                msgbox tmpString
            End If
            resultat = resultat & "Fundet i: " & filnavn & vbCrlf
            '//Skriver resultatet ind           
        End If
    Next
    If resultat = "" Then
        resultat = "sogeordet blev ikke fundet"
    End If
    '//oprydning
    loopLogs = resultat
    set folder = nothing
    set files = nothing
    set FSO = nothing
End Function


Function findSted(logfil,soegeord)
    Dim tmpFSO, linjenr, checkLine, fundet
    Dim linjeNumre
    fundet = false
    set tmpFSO = Wscript.CreateObject("Scripting.FileSystemObject")
    If tmpFSO.FileExists(logfil) Then
        linjenr = 1
        set tmpfil = tmpFSO.OpenTextFile(logfil)
        do until tmpfil.AtEndOfStream
            checkLine = tmpfil.ReadLine()
            '//checkLine skal checkes for om den indeholder soegeord
            If InStr(checkLine,soegeord)>0 Then
                linjeNumre = linjeNumre & linjenr&","
                fundet = true
            End If
            linjenr = linjenr +1
        loop
        tmpfil.close()
        If fundet Then
            findSted = linjeNumre
        Else
            findSted = "¤2"
        End If
    Else
        findSted = "Der er ingen logs i mappen"
    End If
    set tmpFSO = nothing
End Function
Avatar billede thomas_yde Nybegynder
13. juni 2004 - 15:03 #8
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester