Bestimmte zeilen aus Textdatei

  • 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.

    Letztlich kannst Du es natürlich so machen, wie es Dir gefällt :P.

    Dein Skript (Artikeldisposition.au3) hat aber bereits jetzt mehr als 1600 Zeilen !!!

    Hauptgrund ist, dass Du in viele der Variablen, Flags, Funktionen usw. die Position fest eincodierst.

    -> $idCheckbox1, $idCheckbox2, $idCheckbox3, $idCheckbox4 usw.

    Spätestens wenn Du mal Felder anhängen, entfernen oder einfügen musst, wird Dir das Konstrukt mit hoher Wahrscheinlichkeit um die Ohren fliegen.

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

    Im Anhang eine Schnellschuss-Variante mit Selektionsmöglichkeit.

    (ich habe wieder meine Testdaten verwendet (s.o.) - ist ja auch erst mal nur eine Demo)

    Gruß Musashi

  • Sowas wäre auch gut :) würde funktionieren.

    Der einzige haken an der Sache, das programm soll auf einem Tablet laufen mit Touchdisplay :D

    Kann man die Checkboxen größer machen? Und ob man den Scrollbalken immer so genau trifft :)

    Deshalb hatte ich erstmal die andere Version probiert. Da kann man alle größen anpassen.

    Bisher funktioniert auch alles bis auf die Funktionen in den Tabs

    Diese Funktionen müssten irgendwie tabgebunden sein, damit sie nur in dem Tab angezeigt werden, indem sie sich befinden.

    Hängt das eventuell mit der Funktion zusammen? kann man die nicht in Tabs benutzen und dann nur dort anzeigen lassen??

  • Sowas wäre auch gut :) würde funktionieren. Der einzige Haken an der Sache, das Programm soll auf einem Tablet laufen mit Touchdisplay :D

    Diese nicht unwichtige Info hätte auch gerne etwas früher kommen können :P.

    Ich möchte noch einmal Moombas zitieren :

    Jedoch kennt keiner von uns außer Dir den Sinn und Zweck der Labels bzw. den generellen GUI-Aufbau oder Funktion Deines Programms.

    Kann man die Checkboxen größer machen? Und ob man den Scrollbalken immer so genau trifft :)

    Machen kann man vieles - bzgl. z.B. Listviews gibt es eine hervorragende UDF von Melba23 :

    https://www.autoitscript.com/forum/topic/18…sion-26-apr-19/

    Das ist aber nicht gerade der Stoff, aus dem Einsteigerträume gemacht sind.

    Nur mal am Rande :

    Müssen alle Felder der jeweiligen Zeile als Einzellabel 'touchbar' sein, oder geht es nur darum, komplette Zeilen an- bzw. abzuwählen ?

    Da ich (außer meinem Android-Smartphone) nichts touchfähiges herumliegen habe, kann ich Dir wohl nicht weiterhelfen, ohne das Programm quasi selbst zu schreiben :(.

    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."

  • Es geht nur um die komplette zeile. Die muss auswählbar sein.

    Das funktioniert ja alles soweit ganz gut :) Ich brauch nur eine möglichkeit, wie ich eindeutig darstelle kann, ob die zeile gerade ausgewählt ist oder nicht. Weil der Checkbox Button sich sehr ähnlich sieht im unausgewählten und ausgewählten Zustand. Und meine Lösung über die Funktion, wird ja leider überall angezeigt und nicht nur im TAB.

    Oder kann man dort eventuell die Farbe anpassen in der Checkbox wenn sie ausgewählt ist?

    Hier nochmal der Checkbox Code.

    Code
    Global $idCheckbox1 = GUICtrlCreateCheckbox("1", 200, $labelyz1, 60, $labelhoehez1, $BS_PUSHLIKE)
    
    GUICtrlSetOnEvent($idCheckbox1, "OKCheckbox1")
  • Hi shakoon !

    Erst einmal abgesehen von den Punkten :

    1. Checkbox Button sehr ähnlich im unausgewählten und ausgewählten Zustand

    2. vertikale Scrollbar des ListViews ggf. schwer zu 'treffen'

    -> Funktioniert mein Beispiel aus Beitrag #21 den grundsätzlich auf dem Touchpad ?

    (ich kann es, wie gesagt, nicht selbst testen)

    -> Werden alle Tablets (falls mehrere) mit der gleichen Bildschirmauflösung betrieben ?

    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."

  • Moin,

    ich kann per Touch die Checkboxen auswählen und Scrollen geht auch.

    Also Theoretisch ja :)

  • ich kann per Touch die Checkboxen auswählen und Scrollen geht auch.

    OK :thumbup:

    Man könnte im Grunde die Einzelfelder (je Zeile) zu einem Label/Listviewitem machen - dass würde einiges an Komplexität aus der Anwendung nehmen. Bliebe also die Bedienbarkeit der Scrollleiste und der Selektion.

    Es gibt eine Scrollbar-UDF von Melba23 mit einigen Beispielen :

    https://www.autoitscript.com/forum/topic/11…sion-13-may-18/

    Wirf dort mal einen Blick 'rein (speziell in die Beispiele).

    Gruß Musashi

    P.S. : Schaue, wenn Du einen Thread laufen hast, ruhig häufiger in's Forum :P

    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."

  • Was ist denn ein "Label/Listviewitem" ? xD

    Wie macht man denn sowas? Gibts da eventuell auch Beispiele?

  • Und gleich noch ne andere Frage xD

    ich hab jetzt 2 Stunden lang herum probiert und bekomme es nicht hin :D


    ich habe ein Inputfeld, wo ich per barcode den suchbegriff einscanne.


    Der Code, der eingescannt wird, sieht folgendermaßen aus ( es gibt mehrere möglichkeiten, aber immer mit ";" getrennt :(

    510597;135.01.052.00;B12/1/1/1a;1396;BlaBlaBla

    510597;3.135.01.052.00;B12/1/1/1a;1396;BlaBlaBla

    510597;2.5000.0019;B12/1/1/1a;1396;BlaBlaBla

    510597;185.01.001.01.3;B12/1/1/1a;1396;BlaBlaBla

    Das rot markierte, ist immer der Wert, den ich benötige.

    Aber wie bekomme ich z.B. aus 135.01.052.00 ein    'd+;135\.01\.052\.00[^\n]+' ?

    Code
    '\d+;135\.01\.052\.00[^\n]+'


  • 1.)

    Was ist denn ein "Label/Listviewitem" ? xD

    Die Betonung liegt auf "zu einem"

    Man könnte im Grunde die Einzelfelder (je Zeile) zu einem Label oder Listviewitem machen

    Hintergrund : meine Frage

    Müssen alle Felder der jeweiligen Zeile als Einzellabel 'touchbar' sein, oder geht es nur darum, komplette Zeilen an- bzw. abzuwählen ?

    Antwort :

    Es geht nur um die komplette Zeile. Die muss auswählbar sein.

    Mein Vorschlag bestand darin, dass Du die (momentan acht) Datenfelder der jeweiligen Zeile zu einem formatierten String verkettest (eine nicht-proportionale Schriftart wählen). Dann hättest Du nur EIN Label pro Zeile (nicht ACHT), was das Handling vereinfachen würde (nur so eine Idee :P).

    2.)

     'd+;135\.01\.052\.00[^\n]+' ist ein Suchmuster (Pattern) welches Zeilen als Treffer wertet, sofern sie das Muster erfüllen. Du möchtest jetzt umgekehrt aus einer Zeile das Muster generieren, welches diese Zeile treffen würde, oder wie soll ich das verstehen :/ ?

    Gruß Musashi

    P.S. : bei mir kocht gerade ein kleiner Sommerinfekt hoch, daher bin ich ggf. etwas unkonzentriert <X

    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."

  • Das mit der Anzeige und em Listview usw, das scheint gerade ganz gut so zu funktionieren wie ich es jetzt habe xD


    ich hab momentan nur das Problem, aus meinem Eingescannten Barcode, das richtige heraus zu filtern und das in die Suche ein zu bauen.

    Folgendes hab ich jetzt mal so halbwegs probiert xD


    Das ist der Input

    Code
    Global $input = GUICtrlCreateInput("", $guibreite/2-150, $guihoehe/2-25, 300, 50, BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_BORDER))
             GUICtrlSetBkColor(-1, $labelbgcolorh)
                GUICtrlSetColor(-1, $labeltextcolorh)
             GUICtrlSetFont(-1, 30, $FW_BOLD)

    Hiermit wollte ich den 2ten Wert Filtern, durch ";" getrennt

    Und so wollte ich die Suche angeben:


    Aber irgendwo hab ich nen Fehler drin :(

  • Punkt 1 :

    Hiermit wollte ich den 2ten Wert Filtern, durch ";" getrennt

    Code
    Global $input = "450162;135.01.052.00;Hallo;325235;t4t 43"
    
    If IsArray($input) Then
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : IsArray($input) = TRUE' & @CRLF)
        ; ... restlicher Code
    Else
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : IsArray($input) = FALSE' & @CRLF)
    EndIf

    $input ist kein Array ! Daher liefert IsArray($input) ein False zurück (siehe meine eingefügten ConsoleWrites), d.h. Dein Code wird gar nicht ausgeführt.

    [den Rest schaue ich mir in Kürze an]

    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

    Du möchtest jetzt also alle zweiten Felder ohne Filterung.

    So gehts am Einfachsten (kannst du auf eine Einzelzeile oder die gesamte Datei anwenden):

    Python
    ; $sRead enthält deine Textzeile oder die gesamte Datei
    Local $sRepl = StringRegExpReplace($sRead, '\d+;([^;]+).+', '\1')
    ConsoleWrite($sRepl & @CRLF)
  • Du möchtest jetzt also alle zweiten Felder ohne Filterung.

    Beispiel :

    Code
    ; $sRead enthält deine Textzeile oder die gesamte Datei
    Global $sRead = "510597;135.01.052.00;B12/1/1/1a;1396;BlaBlaBla" & @CRLF & _
                    "510597;3.135.01.052.00;B12/1/1/1a;1396;BlaBlaBla" & @CRLF & _
                    "510597;2.5000.0019;B12/1/1/1a;1396;BlaBlaBla" & @CRLF & _
                    "510597;185.01.001.01.3;B12/1/1/1a;1396;BlaBlaBla" & @CRLF
    
    Global $sRepl = StringRegExpReplace($sRead, '\d+;([^;]+).+', '\1')
    ConsoleWrite($sRepl & @CRLF)

    ergibt :

    135.01.052.00

    3.135.01.052.00

    2.5000.0019

    185.01.001.01.3

    Aber wie bekomme ich z.B. aus 135.01.052.00 ein 'd+;135\.01\.052\.00[^\n]+' ?

    BugFix :

    So wie ich es verstehe, möchte shakoon das Subpattern für die jeweilige Nummer erzeugen, also für :

    2.5000.0019 ==> 2\.5000\.0019

    Das fügt er später zusammen mit : 'd+;' & $sSubPattern & '[^\n]+' also so etwas wie :

    Code
    Global $sString = "510597;2.5000.0019;B12/1/1/1a;1396;BlaBlaBla"
    Global $sRepl = StringRegExpReplace($sString, '\d+;([^;]+).+', '\1')
    Global $sSubPattern = StringReplace ($sRepl, '.', '\.')
    Global $sPattern = 'd+;' & $sSubPattern & '[^\n]+'
    ConsoleWrite("Wert    = " & $sRepl & "   Subpattern = " & $sSubPattern & "   Pattern = " & $sPattern & @CRLF)

    -> Wert = 2.5000.0019     Subpattern = 2\.5000\.0019    Pattern = d+;2\.5000\.0019[^\n]+

    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

    So wie ich es verstehe, möchte shakoon das Subpattern für die jeweilige Nummer erzeugen, also für :

    2.5000.0019 ==> 2\.5000\.0019

    Echt?

    Sorry, aber so tief unten habe ich nicht angesetzt beim Denken. :P Selbst wenn man mit RegEx wenig am Hut hat, sollte man zumindest ein wenig Initiative aufbringen um festzustellen, wie das bestehende Pattern die gewünschte Zahlenkombination ausfiltert. Und man braucht keine besonderen Fähigkeiten um zu erkennen, dass dort die Zahlenkombination ergänzt um Backslash vor jedem Punkt verwendet wird. Das sieht man sofort. :/

  • Echt?

    Sorry, aber so tief unten habe ich nicht angesetzt beim Denken. :P

    Ist meine Vermutung - ich bemühe in diesem Thread aber auch weitgehend die :Glaskugel:;)

    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."

  • Ihr überfordert mich gerade ein Wenig xD Ich bin doch blutiger anfänger :( :D

    Ich habe noch nie mit ConsoleWrite gearbeitet und werde nicht so ganz schlau aus der Hilfe Datei.

    Ist das sozusagen der zwischenspeicher? und mit consoleread kann ich den wert wieder holen?

  • Ich habe noch nie mit ConsoleWrite gearbeitet und werde nicht so ganz schlau aus der Hilfe Datei.

    ConsoleWrite ist einfach nur ein Befehl (Funktion), der etwas in die Konsole (das ist das untere Fensterelement des SciTE-Editors) schreibt. Sehr hilfreich, falls Du Fehler suchen, oder generell Werte anzeigen möchtest. Kopiere einfach mal ein Skript aus Beitrag #34 in den Editor und drücke F5.

    EDIT : shakoon

    Man kann Werte natürlich auch in einer MessageBox anzeigen, aber das ist häufig unpraktisch.

    Stelle Dir vor, Du durchläufst eine Schleife (von 1 bis 100).

    Es würde 100 x die MsgBox aufpoppen und müsste mit OK bestätigt werden.

    Die ConsoleWrites werden (ohne Userinteraktion) in die Konsole geschrieben. Du könntest sie sogar kopieren usw.

    (An die Experten : hier geht es um die simple Anwendung innerhalb von SciTE, also nicht um CLI usw.)

    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."

    Einmal editiert, zuletzt von Musashi (23. August 2019 um 12:02)

  • warum macht ihr das denn so kompliziert? Wenn ich mir die zu prüfenden strings ansehe, würde ich schlichtweg mit StringSplit() arbeiten.

    Offenbar wird pro Zeile irgendwie alles benötigt, was jeweils durch ein Semikolon getrennt ist. Daher wär für mich stringsplit in einer for-to schleife die optimale Wahl.


    Ich schreib das grad vom handy, daher macht es sich schlecht für mich ein Beispiel einzufügen.