Zeile mit FileReadLine einlesen, nur bestimmte Werte in txt schreiben

  • da bin ich wieder :D

    Nun habe ich hoffentlich eine abschliessende Frage.
    In der ersten For schleife soll erst die 1.htm Datei eingelsen ausgewertet werden dann die 2.htm datei usw.

    _ArrayDisplay($aResult) zeigt mir auch alle 3 Dateien an nur werden diese nicht in die Console geschrieben sondern immer nur das erste.
    Was mache ich hier falsch?

    Gruß
    Norman


    [autoit]

    #include <array.au3>
    #include <string.au3>
    #include <Excel.au3>

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

    Global $array, $aResult, $file, $i, $sString, $sText, $sText2

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

    global $array[11]

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

    For $s = 1 to 3
    $sText = FileReadLine("C:\Users\"& @UserName &"\Documents\Folder\"& $s &".htm",82)
    $Pob_text = FileReadLine("C:\Users\"& @UserName &"\Documents\Folder\"& $s &".htm",82)
    $plz_ort = FileReadLine("C:\Users\"& @UserName &"\Documents\Folder\"& $s &".htm",82)
    $sText &= FileReadLine("C:\Users\"& @UserName &"\Documents\Folder\"& $s &".htm",83)
    $tText = FileReadLine("C:\Users\"& @UserName &"\Documents\Folder\"& $s &".htm",84)

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

    $aResult = StringRegExp($sText, '(?s)"fname">(.*?)<(?:.*?)"spotft">(.*?)<br>(?:.*?)Tel:(.+?)<br>', 1, 1)

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

    $_Pob = StringRegExp($Pob_text, '"spotft">(.*?)POB(.*?)(?:.*?)', 1, 3)
    $_ort = StringRegExp($plz_ort, '(?s)(?:.*?), POB (?:.*?), (.*?)&nbsp;(.*?)<br>', 1, 3)

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

    _ArrayDisplay($_ort)
    _ArrayDisplay($aResult)

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

    $strasse = StringSplit($aResult[1], ",",1)

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

    _ArrayAdd($array,$aResult[0])
    _ArrayAdd($array,"")
    For $i = 0 To UBound ($strasse)-1
    _ArrayAdd($array,$strasse[$i])
    Next

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

    If IsArray($_ort) Then
    ConsoleWrite($array[11] & @CRLF)
    ConsoleWrite($array[14] & @CRLF)
    ConsoleWrite($aResult[2] & @CRLF)
    ConsoleWrite($_ort[0] & " ")
    ConsoleWrite($_ort[1]& @CRLF)

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

    Else
    ConsoleWrite($array[11] & @CRLF)
    ConsoleWrite($array[14] & @CRLF)
    ConsoleWrite($aResult[2] & @CRLF)

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

    EndIf
    next

    [/autoit]
  • Hi,

    erkenne folgendes Problem:
    Das Array $array wird nie neu überschrieben, bzw. sein Inhalt gelöscht.
    Mit

    [autoit]

    _ArrayAdd($array,$aResult[0])
    _ArrayAdd($array,"")
    For $i = 0 To UBound ($strasse)-1
    _ArrayAdd($array,$strasse[$i])
    Next

    [/autoit]


    fügst du an dasselbe Array, dass du bereits für die anderen Dateien benutzt, weitere Werte an, die nun einen anderen Index tragen als sie eigentlich tragen sollten.
    Da du mit

    [autoit]

    ConsoleWrite($array[11] & @CRLF)
    ConsoleWrite($array[14] & @CRLF)

    [/autoit]


    aber nur diesselben Index abfrägst, werden die neuen Inhalte nicht ausgegeben.

    Also, ein vereinachtes Beispiel:

    Bei Datei eins:
    [0] Wert A aus Datei 1
    [1] Wert B aus Datei 1
    [2] Wert C aus Datei 1

    Nun fügst du für Datei zwei einfach nur weitere Elemente an, als die alten Positionen zu überschreiben (verursacht durch _ArrayAdd)
    Die Liste sieht also nun so aus:

    [0] Wert A aus Datei 1
    [1] Wert B aus Datei 1
    [2] Wert C aus Datei 1
    [3] Wert A aus Datei 2
    [4] Wert B aus Datei 2
    [5] Wert C aus Datei 2

    So setzt sich das mit der 3. Datei dann fort:

    [0] Wert A aus Datei 1
    [1] Wert B aus Datei 1
    [2] Wert C aus Datei 1
    [3] Wert A aus Datei 2
    [4] Wert B aus Datei 2
    [5] Wert C aus Datei 2
    [6] Wert A aus Datei 3
    [7] Wert B aus Datei 3
    [8] Wert C aus Datei 3


    Mit dem hier:

    [autoit]

    ConsoleWrite($array[11] & @CRLF)
    ConsoleWrite($array[14] & @CRLF)
    ConsoleWrite($aResult[2] & @CRLF)
    ConsoleWrite($_ort[0] & " ")
    ConsoleWrite($_ort[1]& @CRLF)

    [/autoit]


    frägst du aber immer nur die ersten Elemente ab - die neuen aus den anderen Dateien werden gar nicht ausgegeben.

    Lösungsansatz:
    Arbeite nicht mit

    [autoit]

    _ArrayAdd

    [/autoit]

    sondern bestimmte die Indices lieber von Hand, sofern du immer die Daten der aktuellen Datei alleine ausgeben möchtest.
    Wenn du alle Elemente ausgeben möchtest, solltest du dir ein Konstrukt folgender Art basteln:

    [autoit]


    For $i = 0 To Ubound($array) - 1
    ConsoleWrite($array[$i] & @CRLF)
    Next

    [/autoit]


    (Leider nicht getestet, enthält möglicherweise Fehler aufgrund einer längerer AutoIt-Pause)

    Ich hoffe, ich habe das Problem richtig erfasst und konnte helfen,
    Gruß stay

    2 Mal editiert, zuletzt von stayawayknight (27. Dezember 2011 um 00:21)

  • :( Ich blicke gerade selber nicht durch. :wacko:

    Wenn ich den Dateinamen in dem Script manuell ändere funktioniert es. Nur wenn ich es in es in eine Schleife einbaue nicht.

    EDIT:

    Habe es gerade rausgefunden. Verwende jetzt nicht mehr $array.

    Gruß
    Norman

    Einmal editiert, zuletzt von Norman Bates (27. Dezember 2011 um 01:11)