Hilfe bei Array !

  • Hallo zusammen,

    könnte mir bitte jemand helfen ?
    folgendes habe ich vor:

    Ich habe an eine Funktion 21 Parameter übergeben die entweder "ok" oder "fehler" beinhalten.
    jetzt möchte ich die, die "fehler" enthalten rausfiltern und in eine msgbox mit @CRLF ausgeben. Das Filtern habe ich schon per _Arrayfindall versucht, das hat auch geklappt aber eben nur über arraydisplay.

    Ich bin mit Array's nicht so gut habe meist die komplexere variante genommen aber jetzt hört der Spaß langsam auf. ;(
    Der Weg ist mir halbwegs klar Array erstellen, sortieren, etc.. aber an der Ausführung hapert es.

    Code
    local $array[] = [$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21]


    Danke im voraus
    Flo

  • Ich habe an eine Funktion 21 Parameter übergeben die entweder "ok" oder "fehler" beinhalten.

    Gut bevor wir uns mit deiner konkreten Frage beschäftigen wäre es wohl sinnvoller erst einmal zu klären was du am Ende erreichen möchtest.
    Was ist das Ziel des ganzen Vorhabens?

  • Das sind abfragen aus einem Formular (GUI) ob Checkboxen aktiviert sind. (Pflichtfelder) und die die nicht gewählt worden sind sollen später angezeigt werden.
    Nach dem Motto Sie haben zu X, Y, Z keine Angaben gemacht...

    Der Quellcode enthält teils brisante Daten, deshalb möchte ich den hier nicht Posten.

    kurzfassung ist:

  • Sorry ich verstehe anhand des Beispieles nicht wirklich was passieren soll.
    Schon gar nicht sehe ich die angesprochene Funktion mit 21 Parametern.

    Wenn ich vom ersten Satz ausgehe und prüfen möchte welche Checkboxen gewählt wurden und welche nicht wäre folgendes ein Vorschlag um mal zu zeigen das man für sowas keine Funktion mit 21 Parameter benötigt:

  • Also ich würde es so machen, erstmal die ganzen Checkboxen erstellen:

    AutoIt
    Local $aCheckbox[21], $aCbText[21] = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"]
    For $i = 0 To 20
    	$aCheckbox[$i] = GUICtrlCreateCheckbox($aCbText[$i], 10, 10+($i*25))
    Next

    Und dann zur Abfrage:

    AutoIt
    $sUnchecked = "Sie haben zu den Werten"
    For $i = 0 To 20
    	If GUICtrlRead($aCheckbox[$i]) = $GUI_UNCHECKED Then
    		$sUnchecked &= " '" & GUICtrlRead($aCheckbox[$i], 1) & "',"
    	EndIf
    Next
    If $sUnchecked <> "Sie haben zu den Werten" Then
    	MsgBox(0, "Keine Angaben", StringTrimRight($sUnchecked, 1) & " keine Angaben gemacht!")
    EndIf

    ich kann den Code leider momentan nicht testen und es ist auch nur so heraus gecodet, kann also nichts versprechen.

  • Sorry das ich mich nicht so klar ausdrücken konnte,

    viel einfacher:
    Das Ganze läuft schon, die GUI nebst Checkboxen etc. ist bereits erstellt, alles was ich brauche ist der weg wie ich aus den 21 Variablen nach dem wort fehler suchen kann und diese entsprechend ausgeben kann.

    in $1 steht das Ergebnis zu der folgenden Abfrage

    Code
    Case GUICtrlRead(44) = 1
         _check1("ok")
    Case Else
         _check1("fehler")

    ich will die 21 Variablen nur ausgewertet haben.

    - Array auswerten
    - msgbox ausgabe "es sind die folgenden Fehler aufgetreten

    msgbox
    - Fehler aus zum Beispiel $3
    - Fehler aus zum Beispiel $8
    - Fehler aus zum Beispiel $15

    etc.

    ich hoffe das bringt klarheit ?

    Danke und Gruß

    Flo

  • Hat jetzt zwar nichts mit Checkboxen zu tun, aber bei einer Auftragsprogrammierung habe ich folgendes Schema verwendet:

    ist nur ein kleiner Ausschnitt, da auf weitere Tabs u.U. schützenswertes Interesse des Kunden.

  • Ich hoffe mal ich hab es jetzt kappiert. Ich würd es einfach so machen :thumbup::rolleyes:

    AutoIt
    $sUnchecked = "Es sind folgende Fehler aufgetreten:"
    For $i = 1 To 21
    	If Eval($i) = "fehler" Then
    		$sUnchecked &= @CRLF & "Fehler in $" & $i & ","
    	EndIf
    Next
    If $sUnchecked <> "Es sind folgende Fehler aufgetreten:" Then
    	MsgBox(0, "Fehler aufgetreten", StringTrimRight($sUnchecked, 1) & ".")
    EndIf
  • kappiert. Ich würd es einfach so machen

    Ich hoffe mal ich hab es jetzt kappiert. Ich würd es einfach so machen :thumbup::rolleyes:

    AutoIt
    $sUnchecked = "Es sind folgende Fehler aufgetreten:"
    For $i = 1 To 21
    	If Eval($i) = "fehler" Then
    		$sUnchecked &= @CRLF & "Fehler in $" & $i & ","
    	EndIf
    Next
    If $sUnchecked <> "Es sind folgende Fehler aufgetreten:" Then
    	MsgBox(0, "Fehler aufgetreten", StringTrimRight($sUnchecked, 1) & ".")
    EndIf


    also das funktioniert schon mal :thumbup:

    Fragen: (Verständnis Probleme)
    warum wird hier nicht der Inhalt von $i ausgegeben sondern die Nummer der Variable ?

    Code
    $sUnchecked &= @CRLF & "Fehler in $" & $i & ","

    angenommen $1 würde so aussehen $1 = "Fehler, es wurde bei Feld 5 kein Wert gesetzt"

    wie kann ich in dem Array trotzdem nach dem Wort Fehler sortieren und den Teil nach dem "," ausgeben ?

    geht das iwie mit StringLeft ?

    Code
    If StringLeft($i,6) = "fehler" Then # so scheinbar nicht

    Einmal editiert, zuletzt von NewProgger (8. Juli 2016 um 17:32)

  • Damit bekomme ich zumindest schon mal die angezeigt das Felder nicht ausgefüllt wurden, aber die Ausgabe ist logischweise "fe" da Stringleft...
    wie bekomme ich das denn nun hin das der ganze Text aus der Variable angezeigt wird ? auch an der richtigen pos. im array ? (nicht das Apfel fehlt und Banane angezeigt wird :D )

  • Habe es selber hin bekommen :thumbup: so funktioniert es wie ich will.

    Danke für die Tipps, ohne die hätte es noch länger gedauert.

  • leider doch noch nicht fertig :thumbdown:

    Auch wenn keine Fehler mehr da sind geht er unten nicht in den else zweig...
    ich habe es schon mit isArray versucht und mit in einer schleife prüfen ob leere Felder da sind und dann mit arraydelet löschen lassen, hat alles nichts gebracht.

    kann mir das jemand erklären ?

  • Ich habe keine Ahnung, wie du bei dieser Problematik auf die Verwendung eines Arrays kommst, wenn du doch letztendlich einen String haben willst....
    Du erstellst ein Array, beschreibst die Array-Items mit Strings, durchsuchst die Array-Items nach Strings, löschst diese Array-Items und schreibst letztendlich alle übriggebliebenen Arrayitems in einen String. Viel komplizierter geht es garnicht....von einer Funktion mit 21 Parametern ganz zu schweigen... :Face:

  • was wäre denn die bessere Lösung?

    die Var 1-21 stammen aus abfragen ob Checkboxen gechecked sind oder nicht.
    das heisst eine Var enthält entweder "ok" oder "Fehler: zum Thema xy wurden keine Angaben gemacht"

    wenn nun PflichtCheckboxen nicht ausgefüllt worden sind sollen diese aufgelistet werden welche es sind und dann Return zur GUI
    wenn alle auf OK stehen soll eine weiter Funktion ausgeführt werden. ( die beinhaltet den Datenimport in Excel etc.)

    es ist halt eine Fehlerabfrage.

    • Offizieller Beitrag

    die Var 1-21 stammen aus abfragen ob Checkboxen gechecked sind oder nicht.

    Für dieses Ergebnis reicht ein einziger Parameter. Du kannst den Checkboxen Werte zuordnen (2-er Potenzen), dadurch ist jeder Wert eineindeutig in einer Gesamtsumme identifizierbar. Hier mal ein Bsp. aus meinen Musterskripten, kannst es dann anpassen:

  • wenn nun PflichtCheckboxen nicht ausgefüllt worden sind sollen diese aufgelistet werden welche es sind und dann Return zur GUI

    könnte alles so einfach sein, hierfür nimmt man Radio's und belegt einen der Werte vor. Dies habe ich so ähnlich schon ein paar Mal in deinem anderen Thema bemerkt:

    Scheiß auf das Layout, die Funktionalität zählt und mit deinem (für dich) Superlayout kommen nur dumme Fragen, denn

    Checkbox=Mehfachauswahl möglich, Radio=nur eine Antwort möglich. Man sollte Windowscontrols so verwenden wie sie vorgesehen sind, alles andere verunsichert nur den Anwender.

    und wie man sieht, nicht nur den Anwernder. Der Programmierer ist sicher auch nicht sicher hat er oder hat er nicht?:

    Habe es selber hin bekommen

    leider doch noch nicht fertig


    BugFix : bezweifle, daß er das liest ich habe ihm in meinem vorhergehenden Post etwas ähnliches demostriert, allerdings nicht mit Checkboxen.

  • autoBert, Dich mögen bestimmt ganz viele Menschen oder ? kleiner Stinkstiefel ! wie ich bereits schrieb möchte ich keine Radiobutton. Wenn es Dir nicht passt was ich möchte ja dann lies doch meinen Post nicht geschweige denn schreib hier rein!

    Oder hast DU meine Posts nicht gelesen ?

  • Oder hast DU meine Posts nicht gelesen ?

    ich deine schon, du aber hast mind. 1 überlesen: https://autoit.de/index.php/Thre…5503#post675503 geschweige denn getestet was ich als Demo eingestellt habe. Von daher halte ich

    BugFix : bezweifle, daß er das liest ich habe ihm in meinem vorhergehenden Post etwas ähnliches demostriert, allerdings nicht mit Checkboxen.

    diese Bemerkung für gerechtfertigt, im Gegensatz zu:

    autoBert, Dich mögen bestimmt ganz viele Menschen oder ? kleiner Stinkstiefel !

    damit macht man sich hier sicher Freunde.