Ausgabe in eine TXT

  • Moin-Moin.

    Ich habe folgenden Script:

    Spoiler anzeigen
    [autoit]


    $x = FileOpenDialog("Select a file.", @DesktopDir, "Text Files (*.txt)", 3)
    $String = "Deutschland"

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

    $Var = _FileFindString($x, $String)
    For $xx = 0 To 2
    MsgBox(0, "", $Var[$xx])
    Next

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

    Func _FileFindString($sPath, $sString)
    Local $_Found
    Local $_LineNumber
    Local $_TimesFound = 0
    Local $_Return[3]

    $_FileOpen = FileOpen($sPath, 0)
    $_FileRead = FileRead($_FileOpen)
    $_Split = StringSplit($_FileRead, Chr(10))

    For $_i = 1 To $_Split[0]
    $_FileReadLine = FileReadLine($_FileOpen, $_i)
    If StringInStr($_FileReadLine, $sString) Then
    $_Found &= $_FileReadLine & @CRLF
    $_LineNumber &= $_i & @CRLF
    $_TimesFound += 1
    EndIf
    Next

    If $_Found <> "" Then
    $_Return[0] = $_LineNumber
    $_Return[1] = $_TimesFound
    $_Return[2] = $_Found
    FileClose($_FileOpen)
    Return $_Return
    Else
    FileClose($_FileOpen)
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Wie bekomme ich den $_Return[2] (letzte angezeigte MsgBox) in eine Textdatei gespeichert.

    Das Problem wird wohl auch werden, das die Textdatei selber, in der gesucht und die Daten rausgeschrieben werden sollen, schon 3,8 MB groß ist. Aber da werde ich ggf. viele kleine Dateien draus machen.

    Danke für die lieben AW's und eine ruhige Nacht.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Alina,
    Einzeiler.... :thumbup:

    [autoit]

    For $xx = 0 To 2
    MsgBox(0, "", $Var[$xx])
    Next

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

    FileWriteLine("_Found_file.txt",$var[2]) ;die letzte messagebox in ein file schreiben

    [/autoit]

    zweiter...das kommt davon wenn man mitten in der Nacht Kaffee kochen geht....

    • Offizieller Beitrag

    Die Funktion an sich kann man auch noch verkürzen/schneller machen:

    Spoiler anzeigen
    [autoit]


    $x = FileOpenDialog("Select a file.", @DesktopDir, "Text Files (*.txt)", 3)
    $String = "Deutschland"

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

    $Var = _FileFindString($x, $String)
    For $xx = 0 To 2
    MsgBox(0, "", $Var[$xx])
    Next
    FileWriteLine("_Found_file.txt",$var[2]) ;die letzte messagebox in ein file schreiben

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

    Func _FileFindString($sPath, $sString)
    Local $_Found
    Local $_LineNumber
    Local $_TimesFound = 0

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

    $_FileRead = FileRead($sPath)
    $_Split = StringSplit($_FileRead, Chr(10))
    ;~ $_Split = StringSplit($_FileRead, @CRLF, 1) ; evtl. so, wenn das Zeilenende nicht nur aus @LF besteht.

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

    For $_i = 1 To $_Split[0]
    If StringInStr($_Split[$_i], $sString) Then
    $_Found &= $_Split[$_i] & @CRLF
    $_LineNumber &= $_i & @CRLF
    $_TimesFound += 1
    EndIf
    Next

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

    If $_Found <> "" Then
    Local $_Return[3] = [$_LineNumber, $_TimesFound, $_Found]
    Return $_Return
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]


    Wenn Du die Datei sowieso schon komplett einliest, brauchst Du sie anschließend nicht nochmal Zeile für Zeile einlesen. Einfach den gesplitteten Inhalt benutzen. :)

  • Mal ganz davon abgesehen, dass die For-Next-Schleife eher so aussehen sollte:

    [autoit]

    For $_i = 1 To $_Split[0]
    If StringInStr($_Split[$_i], $sString) Then
    $_Found &= $_Split[$_i] & @CRLF
    $_LineNumber &= $_i & @CRLF
    While StringInStr($_Split[$_i],$sString)
    If StringInStr($_Split[$_i],$sString) Then $_Split[$_i] = StringTrimLeft($_Split[$_i],StringInStr($_Split[$_i], $sString)+StringLen($sString)-1)
    $_TimesFound += 1
    Wend
    EndIf
    Next

    [/autoit]


    Sonst findet man nämlich mehrere "Deutschland" in einer Zeile nicht (oder ist das gewollt?)

    Edit: hmm das erste hat nciht so funktioniert :S