Jeder Teil-String in Gesamt-String enthalten?

  • Hallo miteinander,
    also ich versuche mal mein Problem zu schildern :)

    Ich habe ein Text-File "Tracklist.txt" ($Tracklist) in dem mehrere Zeilen Text sind... Jetzt habe ich irgendwoher Input - den "Teil-String" "achts kält raus". Nu möchte ich dass überprüft wird, ob jeder einzelne String (also praktisch jedes Wort ("achts","kält","raus")) auch zusammen in einer Zeile des Text-Files vorkommt (irgendeine Zeile sollte den "Gesamt-String" "Nachts ist kälter als draussen" enthalten... Wenn es eine Zeile geben sollte, soll hier gestoppt werden...

    Vllt stell ich mich einfach nur wirklich herrlich blöde an, aber für scheint es iwie nur so zu gehen, es sei denn ich habe n paar Befehle übersehen :P .... Und nun komme ich leider irgendwie garnicht mehr weiter :D Code stimmt so garnich mehr und ergibt keinen Sinn, aber vllt versteht ja jemand den Sinn...

    Bedanke mich schonmal vorträglich für Hilfestellungen und nu mein bisheriger Code:

    [autoit]

    $Input = "achts kält raus"
    If $Input <> "" and StringIsSpace($Input) = 0 Then
    For $i = 1 to _FileCountLines($Tracklist) Step +1
    Global $Random_Track_Pfad = FileReadLine(FileOpen($Tracklist, 0), $i)
    $Strings = StringSplit($Input, " ")
    For $j = 1 to $Strings[0] Step +1
    If StringInStr($Random_Track_Pfad, $Strings[$j]) = 1 Then
    Global $Korrekt = 1
    Else
    Global $Korrekt = 0
    FileClose($Tracklist)
    ExitLoop
    EndIf
    Next
    If $Korrekt = 1 Then
    FileClose($Tracklist)
    ;;; dann aufhören im Text-File weiter nach passenden Zeilen zu suchen
    ExitLoop
    EndIf
    Next
    EndIf

    [/autoit]

    LG Andy :)

    Einmal editiert, zuletzt von AndyTR (8. August 2010 um 11:27)

  • Mal bisschen umgebaut (Vor allem die globalen Mehrmalsdeklarationen der Variablen entfernt):

    Spoiler anzeigen
    [autoit]

    Global Const $Tracklist = @ScriptDir & "\Tracklist.txt"
    Global $Random_Track_Pfad, $Korrekt, $sLine, $bIsIn, $aInput ;Alle benötigten Variablen nur 1x am Anfang deklarieren

    [/autoit] [autoit][/autoit] [autoit]

    Global $Input = "achts kält raus"
    Global $aInput = StringSplit($Input, " ", 2) ; 3.Parameter=2 damit wir For-In nutzen können (übersichtlicher)
    If @error Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    ; Tracklist.txt zum Lesen öffnen
    Global $hFile = FileOpen($Tracklist)
    If $hFile = -1 Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    Do ; Endlosschleife
    $sLine = FileReadLine($hFile) ;nächste Zeile der Datei lesen (wird danach automatisch auf die nächste Zeile gesetzt!)
    If @error = -1 Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    $bIsIn = True ;Setze boolsche Variable erstmal optimistisch auf True
    For $sWort In $aInput
    If Not StringInStr($sLine, $sWort) Then $bIsIn = False ; Wenn Wort nicht vorkommt dann setze $bIsIn wieder auf False
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $bIsIn Then ;Wenn $bIsIn nicht zurückgesetzt wurde heißt das dass alle Wörter vorkamen
    MsgBox(0, "Juhuu", "Mindestens 1x kamen alle Wortteile in einer Zeile vor")
    ExitLoop
    EndIf
    Until 0

    [/autoit]