Teile eines Arrays auslesen

  • Ich habe folgendes Problem, das Script soll eine Datenbank durchsuchen und sobald er auf eine variable stösst, einen teil der db rausschreiben und in ner anderen datei posten

    kann mir da jemand helfen?
    _______________________________________________________

    #include file.au3

    Dim $aArray

    _FileReadToArray ( @ScriptDir & "\log.txt", $aArray ) ;damit lade ich die db

    <hier müsste das hin, dass er immer einen teil der db als array einlist>

    If $var4 = $sSuchkriterium
    $file = FileOpen("log2.txt", 1)

    FileWrite($file, $var1 & $var3 & $var5 @CRLF)
    ____________________________________________________
    so sieht die db aus:
    ____________________________________________________
    <viel text, gefolgt von>
    <tr>
    <td>$var1</td>
    <td><$var2>$var3</a></td>

    <td>$var4</td>
    <td>$var5</td>
    <td $var6>$var7</td>
    <td>&nbsp;</td>
    </tr>
    <tr>
    .....
    </tr>
    <tr>
    ....
    </tr>
    ...

    <am ende wieder viel text>

    Einmal editiert, zuletzt von Goniwa (15. Oktober 2007 um 11:36)

    • Offizieller Beitrag
    Zitat

    _FileReadToArray ( @ScriptDir & "\log.txt", $aArray ) ;damit lade ich die db

    <hier müsste das hin, dass er immer einen teil der db als array einlist>


    ??
    Du hast doch die eingelesene Datei bereits im Array. Was willst du jetzt noch einlesen?
    Du mußt nur das Array durchgehen und nach deinen Kriterien selektieren.

    [autoit]

    For $i = 1 To $aArray[0]
    $aArray[$i] ; ist der Inhalt der aktuellen Zeile, kannst du auswerten
    Next

    [/autoit]
  • Ja genau das "Durchgehen und Selektieren" ist ja der Schritt den ich nicht hinbekomme. Im Prinzip will ich ne Suchmaske mit mehreren Variablen drüber laufen lassen, aber genau das geht über meine Fähigkeiten.
    Bzw, genau das Auslesen der Variablen aus dem Array und dann das anschliessende deklarieren der Variablen.

    Einmal editiert, zuletzt von Goniwa (15. Oktober 2007 um 11:49)

    • Offizieller Beitrag

    Sind denn in deinem Quelltext die Anweisungen
    <td>.... </td>
    nur einmalig in der benannten Form vorhanden?
    Dann kannst du beim Durchgehen der Zeilen doch mit _StringBetween() arbeiten.

    [autoit]

    Dim $arFound[1]
    $val = _StringBetween($aArray[$i], '<td>', '</td>', 1)
    If IsArray($val) Then
    ReDim $arFound[Ubound($arFound)+1]
    $arFound[Ubound($arFound)-1] = $val[0]
    EndIf

    [/autoit]

    $arFound enthält dann alle Treffer. Die brauchst du dann nur noch den Variablen zuordnen, wobei du den zweiten und fünften Treffer ja noch splitten mußt.

  • nein die werte zwischen dem <tr> ... </tr> tretten öfters auf.
    Die Db ist ein logdatei und die einzelnen <tr> ... </tr> trennen nur verschiedene Einträge. Das Script soll dann anhand des Accountnamens ($var4) Uhrzeit ($var1), Aktion ($var7) usw auslesen und in einer neuen log datei speichern.

    ________________________________________________________

    #include file.au3

    Dim $aArray
    Dim $aSuche


    For $i = 1 To $aArray[0]
    if _StringBetween($aArray[$i], '<td>', '</td>', 1) = $aSuche Then
    $aName = $aSuche
    $aOrt = _StringBetween($aArray[$i-2], '<td>', '</td>', 1)
    $aLink = _StringBetween($aArray[$i+2], '<a href="', '">', 1)
    $aArt = _StringBetween($aArray[$i-1], '">', '</a>', 1)

    $file = FileOpen(@ScriptDir & "log2.txt", 1)

    FileWrite($file, $aName & $aOrt & $aLink & $aArt )
    FileClose($file)
    Next

    _____________________________________________
    wer da drin nen fehler finder solls mir sagen ^^

    Einmal editiert, zuletzt von Goniwa (15. Oktober 2007 um 14:13)

  • ??

    Zitat

    $aOrt = _StringBetween($aArray[$i-2], '<td>', '</td>', 1)
    $aLink = _StringBetween($aArray[$i+2], '<a href="', '">', 1)
    $aArt = _StringBetween($aArray[$i-1], '">', '</a>', 1)


    du benutzt hier den $aArray innerhalb der schleife mehrmals, d.h. wenn du zB im ersten durchlauf, $i = 1 hast, wäre dann

    [autoit]

    $aArray[$i] = $aArray[1]
    $aArray[$i-2] = $aArray[1-2] = $aArray[-1]
    $aArray[$i+2] = $aArray[1+2] = $aArray[3]
    $aArray[$i-1] = $aArray[1-1] = $aArray[0]

    [/autoit]

    d.h. du überschreibst die einzelnen array-elemente dauernd wieder, sobald du mehr als eine adresse etc. auslesen willst.
    ich würde lieber einen 2-dimensionalen array benutzen, der sieht dann so aus:

    [autoit]

    $aArray[1][0]

    [/autoit]

    dann kannst du

    [autoit]

    $aArray[1][0] für Ort,
    $aArray[1][1] für die Adresse,
    $aArray[1][2] für den Namen,
    $aArray[1][3] für Art benutzen, oder in anderer reihenfolge.

    [/autoit]

    Einmal editiert, zuletzt von darksideofsanta (15. Oktober 2007 um 15:35)

    • Offizieller Beitrag
    Zitat

    if _StringBetween($aArray[$i], '<td>', '</td>', 1) = $aSuche Then


    Da fängt der Käse schon an. :)

    Liebe Fragesteller: Bitte LEST DIE ANTWORTEN!!
    Wozu bringe ich ein Bsp. mit korrekter Syntax, wenn du dir nicht mal die Mühe machst die Funktion anzuschauen.
    _StringBetween() liefert ein Array zurück!! Deine obige Abrage ist somit total fürn .... !
    Die Verwendung von Arrays solltest du dir dringend etwas genauer anschauen.

    Nochwas: Wir können den Code hier mit Tags versehen. Das verbessert die Lesbarkeit eines Posts enorm.
    Was habt hier gegen einen gut lesbaren Post einzuwenden, dass ihr euch strikt weigert Tags zu setzen?

  • @ darksideofsanta

    Das $i bei dem $aArray[$i] gibt ja nur die Zeile im Array an. Der soll jedoch wenn er in einer Zeile etwas findet Dinge aus anderen Zeilen kopieren.
    Die Arrayelemente SOLLEN ja wieder überschrieben werden, wenn die Suche nochmal anschlägt, dass nicht wieder die ersten Variablen übernommen werden, sondern Neue!

    BugFix

    Tschuldigung, ich hab das ganze schon durchgelesen, aber ich beschäftige mich erst seit 2 Tagen mit dem Programm und bin deshalb noch nicht so geübt und hab durch nen Denkfehler die Syntax durcheinander geworfen.
    Btw, nicht jeder ist so geschickt beim posten wie du und kennt das Forum so auswendig, dass er es schafft, seine Scripts farblich hier abzusetzen......

  • und schreibst du am anfang vom script schon was in den array rein? zB in $aArray[1] ?? weil du ÜBERschreibst ja, sobald du im ersten diesen besagten string findest, zB mit $aArray[$i+2] ja den 3., also $aArray[3]..
    mach das besser mit nem mehrdimensionalen, wesentlich übersichtlicher und du musst nicht [$i+2 /-2 /-1] oder sonst was nehmen, oder brauchst du genau diese zahlen später noch oO??

  • Je weiter ich komme, desto mehr läufts auf den punkt raus den du mir vorhälst ^^ Aber ich komme einfach net mehr weiter...

    Der soll die Werte, als reaktion auf einen Suchtreffer aus der DB nur kurz als block auslesen, sie in einer .txt datei speichern und weiter die db durchsuchen.
    der ausgelesene array kann immer wieder einen neuen wert annehmen, solange er vorher kurz in einer log datei ausgegeben wird.

  • dann brauchste das doch nich in irgendwelche variablen schreiben, sondern kannst direkt in die txt-file schreiben ;)