Bestimmte zeilen aus Textdatei

  • Hallo,

    ich benötige mal wieder Hilfe :(

    Ich habe eine Textdatei wo folgende Daten (Beispiel) drin stehen. Daten Immer mit Simikolon getrennt.

    10;135.01.052.00;2;504194;2.19.050

    80;135.09.082.00;2;509644;2.19.080

    110;185.15.112.00;2;503741;2.19.077

    610;185.15.112.00;1;305489;2.18.100

    650;185.15.112.00;1;305889;2.18.101

    630;185.15.112.00;1;305989;2.18.102


    Nun möchte ich mit Autoit die Textdatei auslesen und alle Zeilen wo jetzt z.B. genau "185.15.112.00" drin vorkommt (wichtig, muss exakt übereinstimmen falls möglich) in Autoit bekommen.

    Die Werte der einzelnen Zeilen, möchte ich dann in verschiedenen "GUICtrlCreateLabel" anzeigen lassen.

    ist das irgendwie möglich? Sollte doch eigentlich kein Hexenwerk sein, aber ich hänge hier schon seit 1 Woche dran, und finde auch nichts Hilfreiches im Internet darüber :(

    • Offizieller Beitrag

    ist das irgendwie möglich?

    Klar!

  • Ok :D danke schonmal für die schnelle Antwort :)

    Da muss ich mich jetzt erstmal reinarbeiten xD

    Kann ich hier auch den Pfad zur textdatei angeben?

    Global $sData = C:\Blabla \Texttdatei.txt

    Die Texttdatei hat immer wechselnde Informationen, die wird ständig aktualisiert. Daraus will ich dann die Zeilen heraus suchen mit dem Wert.

  • Kann ich hier auch den Pfad zur textdatei angeben?

    Global $sData = C:\Blabla \Texttdatei.txt

    Das bekommst Du sicher auch selbst hin ;) - siehe Hilfe : FileRead

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Kannst du auch so lösen:

    EDIT:

    Wenn ich das richtig interpretiere ist die Anzahl der Treffer in der Datei unterschiedlich. Dann solltest du in der GUI die Werte als Liste/Listview (dynamische Ctrl) eintragen oder musst die GUI bei Verwendung von Label (statische Ctrl) selbst dynamisch gestalten. Dafür mal ein Bsp. aus meiner Sammlung:

  • Hallo Bugfix :)

    Dein oberes Beispiel habe ich jetzt mal ausprobiert,

    Aber irgendwie, findet er dann nur den gesuchten wert, und die anderen spalten werden nicht befüllt xD

    Woran könnte das liegen?

  • Jap, sorry war mein Fehler xD

    hatte eben noch ein paar Spalten erweitern, aber vergessen

    Local $aDetail[UBound($aLines)][9]

    von 5 auf 9 zu erhöhen


    Danke vielmals an euch :)

  • Nochmal ne kurze Frage xD

    habe jetzt alles soweit hinbekommen und es Fuktioniert auch, aber gehen wir mal davon aus, ich habe nur 6 zeilen als treffer, dann werden die ersten 6 zeilen auch wunderbar angezeigt, aber bei folgendem kommt dann ein fehler. Wie bekommt man das denn am einfachsten hin, wenn $aDetail[6][0] keine Daten hat, das dann z.B. "0" oder ein "-" angezeigt werden?

    Code
    $aDetail[6][0]
  • Bei dem Screenshoot von dir z.B..

    Da gibt es Reihe 0,1,2 und 3.

    Ich habe in meinem Script 15 Reihen, die jeweils 8 spalten haben, die ich mit den Daten aus dem Array befüllen will.

    Da mache ich mit

    $aDetail[0][1] - $aDetail[0][2] - $aDetail[0][3] - $aDetail[0][4] - $aDetail[0][5] - $aDetail[0][6] - $aDetail[0][7] - $aDetail[0][8]

    $aDetail[1][1] - $aDetail[1][2] - $aDetail[1][3] - $aDetail[1][4] - $aDetail[1][5] - $aDetail[1][6] - $aDetail[1][7] - $aDetail[1][8]

    $aDetail[2][1] - $aDetail[2][2] - $aDetail[2][3] - $aDetail[2][4] - $aDetail[2][5] - $aDetail[2][6] - $aDetail[2][7] - $aDetail[2][8]

    usw. bis

    $aDetail[15][1] - $aDetail[15][2] - $aDetail[15][3] - $aDetail[15][4] - $aDetail[15][5] - $aDetail[15][6] - $aDetail[15][7] - $aDetail[15][8]


    Aber wenn ich z.B. nur 5 Zeilen finde im Array, dann hat er nen Fehler bei zeile 6, weil die ja außerhalb des Bereichs liegt.

    Code
    GUICtrlCreateLabel($aDetail[6][0], $labelxs1, $labelyz7, $labelbreites1, $labelhoehez7, BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_BORDER))
    GUICtrlCreateLabel(^ ERROR


    Der Array Code von dir:

    befüllt wird sowas hier:

  • Ouch, bin bei Autoit zwar nicht bewandert was die GUI angeht aber das müsste man doch über eine Schleife besser lösen können (und dort dann abfragen ob dann überhaupt eine entsprechende Zeile "zum befüllen" existiert und auch nur dann die GUI erstellt). Das müsste schöner aussehen und auch das Problem lösen.

    Leider kenne ich selber das aktuell nur aus Delphi.

    Müsste doch so gehen (ungetestet)

    Code
    for $i = 0 to UBound($aDetail, 1) - 1 Step 1
      GUICtrlCreateLabel($aDetail[$i][1] , $aDetail[$i][2], $aDetail[$i][3]-50, $aDetail[$i][4], $aDetail[$i][5], BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_BORDER))
      GUICtrlSetBkColor(-1, $labelbgcolorh)
      GUICtrlSetColor(-1, $labeltextcolorh)
      GUICtrlSetFont(-1, $fontsizelabelh, $FW_BOLD)
    Next

    4 Mal editiert, zuletzt von Moombas (15. August 2019 um 15:51)

  • Mit solchen schleifen habe ich noch nie gearbeitet xD

    Ich mach mir immer ein GUI, setze dort meine festen Label oder Input felder rein, befülle die dann mit variablen, und das wars :D

    Problem is halt auch, es kann passieren, das dort mal 30 Treffer angezeigt werden, ich aber in den GUI maximal 15 Zeilen bekomme.

  • Dann musst du dich dann entscheiden ob du deine GUI Scrollbar machst und dennoch weiter deine Elemente anlegst oder du mehrere Seiten anlegst oder du generell dann immer nur die 15 ersten Treffer anlegst. Letzteres könnte jedoch zu irritation führen, sofern du dafür dann keine Info ausgibst.

  • Ich mache mir immer ein GUI, setze dort meine festen Label oder Inputfelder rein, befülle die dann mit Variablen, und das wars :D

    Nur weil man etwas schon immer gemacht hat, muss es ja nicht so bleiben ;).

    Auf eine Alternative, die BugFix bereits genannt hat, bist Du bisher nicht eingegangen :

    Wenn ich das richtig interpretiere ist die Anzahl der Treffer in der Datei unterschiedlich. Dann solltest du in der GUI die Werte als Liste/Listview (dynamische Ctrl) eintragen ...

    Statt statische Labels (variabler Menge) auf mehrere Tabs zu verteilen etc. wäre Listview ggf. die elegantere Lösung. Das (die?) Listview wäre scrollbar und sogar editierbar (Dein Arrayproblem wäre damit auch verständlicher zu lösen).

    Oder gibt es außer Tradition einen besonderen Grund LABELS zu verwenden ?

    Poste bitte auch mal eine Textdatei (unter Dateianhänge) mit ausreichend Daten, dann muss man sich die nicht selber erstellen !

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • shakoon: Ich Meinte durchaus Seiten über Tabs. Ich denke das BugFix/ Musashi mit ihrer Aussage generell richtig liegen. Jedoch kennt keiner von uns außer dir Den Sinn und Zweck deiner Labels bzw. den generellen GUI-Aufbau oder Funktion deines Programms.

  • shakoon :

    Ich denke das BugFix/ Musashi mit ihrer Aussage generell richtig liegen. Jedoch kennt keiner von uns außer dir den Sinn und Zweck deiner Labels bzw. den generellen GUI-Aufbau oder Funktion deines Programms.

    Amen :saint:

    Hi shakoon !

    Hier eine Variante über Listview ! Dazu das Skript sowie die von mir erstellte Fantasie-Datendatei ListData.txt (siehe Anhang) in ein Verzeichnis kopieren.

    Es gibt zwei Pattern :

    1. alle Einträge werden gefunden -> $sPattern = '\d+;AN\d+;\d+\.[^\n]+'

    2. nur Einträge mit xx.99. werden gefunden -> $sPattern = '\d+;AN\d+;\d+\.99\.[^\n]+'

    (zur Anschauung jeweilig auskommentieren)

    So bald wir genauere Infos erhalten, kann das angepasst werden.

    Für die Überschriften habe ich Deinen Beitrag #11 als Vorlage genommen.

    Gruß Musashi

  • Moin, habe das mit dem Tab ausprobiert und damit klappt es ganz gut.

    ich habe mir jetzt pro Tab 10 ergebnisse anzeigen lassen. Läuft auch alles soweit.

    Mit dem Listview bekomme ich es glaube nicht so ganz hin.

    Also, ich habe eine textdatei, in der stehen daten. Die möchte ich anhand einer Nummer filtern, und mir die ergebnisse anzeigen lassen. das haben wir ja schon hinbekommen.

    Dann möchte ich von diesen ergebnissen bestimmte zeilen auswählen und diese ausgewählten dann in eine andere textdatei schreiben.

    ich hänge euch mal mein momentan gebasteltes ding dran.

    das mit dem daten in die textdatei speichern am ende bekomme ich schon hin, soweit bin ich noch nicht.

    mein problem ist nun, wenn ich auf eine Checkbox in tab 1-10 klicke, wird links daneben ein grünes feld kommen, was mir der status der checkbox anzeigt. (grün=gedrückt, rot=nicht gedrückt)

    Diese Funktion die das Rot und Grün macht, wird dann aber in allen 3 Tabs sichtbar, ich möchte sie aber nur im ersten TAB haben. Also wenn ich eine Checkbox im ersten Tab drücke, soll die funktio nauch nur im ersten Tab angezeigt werden. Wenn ich die Chechbox im 2ten drücke, dann nur im 2ten tab... usw....


    Das problem mit dem Array Error, habe ich übrigens so gelöst, falls das mal jemand sucht hier :D