String über zwei Zeilen -> Textdatei danach durchsuchen

  • Hallo,

    ist es möglich einen String über zwei Zeilen zu erstellen? Mal ein Beispiel, wie ich es mir vorstelle:

    Code
    Sonne
    Mond


    Falls das ginge, würde ich dann gerne eine Textdatei danach durchsuchen und die Zeile ausgeben lassen. Habe gesehen, dass es FileRead und FileReadLine gibt, jedoch ist es da nicht möglich nach einem bestimmten Wort/String zu suchen (glaube ich zumindest^^).


    MfG,
    schw3ndi

  • Danke, hat geklappt. Gibt es auch eine Möglichkeit, anstelle der Zeichenposition die Zeile angeben zu lassen?

  • Hier das geht so

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    Global $aArray
    $Datei = ;~~Bitte anpassen

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

    _FileReadToArray($Datei,$aArray)
    For $x = 1 To $aArray[0] - 1
    If $aArray[$x] = "Sonne" Then
    If $x >= UBound($aArray) Then ExitLoop
    If $aArray[$x + 1] = "Mond" Then
    ConsoleWrite("Sonne besindet sich in Zeile:" & $x & @CRLF)
    ExitLoop
    EndIf
    EndIf
    Next

    [/autoit]
  • Perfekt, vielen Dank!

    EDIT: Was bewirkt UBound in dem Skript? Werde daraus nicht wirklich schlau:

    Zitat

    Gibt die Größe (Obergrenze) der Dimension eines Datenfeldes (array) zurück.

  • Spoiler anzeigen
    [autoit]


    #include <array.au3>
    Dim $array[3]

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

    $array[0] = "Hallo"
    $array[1] = "Welt"
    $array[2] = "!"

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

    _ArrayDisplay($array, "Eindimensionales Array mit 3 Elementen")

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

    $length = UBound($array)
    MsgBox(0, "", "UBound() gibt die Länge des Arrays zurück." & @CRLF & "Dieses Array hat " & $length & " Elemente")

    [/autoit]

    Was Sprenger in seinem Skript damit bezweckt verstehe allerdings im Moment überhaupt nicht.
    $x wird diese Bedingung doch niemals erfüllen. Die Schleife läuft praktisch nur bis UBound($Array)-2.

  • Hast du einen Array mit maximal 15 felder, gibt UBound die Zahl 15 zurück. Also UBound gibt die anzahl der Arrayfelder zurück.

    • Offizieller Beitrag

    Was Sprenger in seinem Skript damit bezweckt verstehe allerdings im Moment überhaupt nicht.
    $x wird diese Bedingung doch niemals erfüllen. Die Schleife läuft praktisch nur bis UBound($Array)-2.


    Er hat eine unnütze Abfrage drin (If $x >= UBound($aArray) Then ExitLoop), denn mit der Zählerbedingung wird richtigerweise nur bis UBound($Array)-2 adressiert. Somit ergibt sich der Abfragestatus niemals.
    Dass nur bis zum vorletzten Element durchlaufen wird ist OK - es soll ja auf Kombination mit einem Folgeelement geprüft werden.

  • Gut dann halt so (war ja auch schon spät gestern oder ehr heute ^^)

    [autoit]

    #include <File.au3>
    Global $aArray
    $Datei = @ScriptDir & "\Neues Textdokument.txt" ;~~Bitte anpassen

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

    _FileReadToArray($Datei, $aArray)

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

    If IsArray($aArray) Then
    For $x = 1 To $aArray[0] - 1
    If $aArray[$x] = "Sonne" Then
    If $aArray[$x + 1] = "Mond" Then
    ConsoleWrite("Sonne besindet sich in Zeile:" & $x & @CRLF)
    ExitLoop
    EndIf
    EndIf
    Next
    EndIf

    [/autoit]
  • Moin!

    Ich würde wie L3viathan StringInStr bevorzugen!

    Habe da noch eine Func ist das selbe wie StringInStr nur hat zwei möglichkeiten entweder Suche gleich Suche oder peer Wild Card.


    [autoit]

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; Func _WinAPI_PathMatchSpec
    ; $pszFile = String
    ; $pszSpec = Such_String entweder [Such_String] o. [*Such_String*] o. [Such_String*] o. [*Such_String]
    ; Return = True / False
    ; Kleienr27 04.08.2010
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Func _WinAPI_PathMatchSpec($pszFile, $pszSpec); Durchsucht einen String mit einem Microsoft MS-DOS Wild Card Match
    Dim $aResult = DllCall('shlwapi.dll', 'bool', 'PathMatchSpecA', 'str', $pszFile, 'str', $pszSpec)
    If @error Then Return SetError(@error, @extended, False)
    Return BitAND($aResult[0], 1) = 1
    EndFunc ;==>_WinAPI_PathMatchSpec

    [/autoit]

    StringInStr ist in der Globalen suche schneller

    LG Kleiner