Clipboard auslesen und durchsuchen

  • Hallo,
    ich muss einen von mir kopierten text mit autoit in eine textdatei abspeichern und diese textdatei dann durchsuchen.

    der gespeicherte text sieht z.b. so aus:

    Bc,123,44,99
    Ji,0.22,33.4,14
    Lw,48,30.3,22.1
    Ni,11.4,55,44
    Hk,68,44,51.2

    diese "tabelle"/infos sind kopiert und diese sollen in eine textdatei abgespeichert werden.

    dannach soll autoit diese datei nach den anfangsbuchstaben durchsuchen (z.b. Lw) und mir daraufhin die komplette zeile als variable speichern.

    diese variable soll dann aufgeteilt werden in die einzelnen zahlen.

    beispiel:

    der kopierte text in der .txt ist
    Bc,123,44,99
    Ji,0.22,33.4,14
    Lw,48,30.3,22.1
    Ni,11.4,55,44
    Hk,68,44,51.2


    jetzt gebe ich in eine inputbox "Lw" ein.
    daraufhin werden mir variablen erstellt die hinter Lw in der selben zeile stehen:
    $var1 = 48
    $var2 = 30.3
    $var3 = 22.1


    ist dies möglich ?
    falls ihr noch mehr infos braucht, sagt bescheid :)

  • Das dürfte alles sein, was du brauchst:

    MfG Kanashius

  • vielen dank für die antwort.
    leider funktioniert das mit dem auslesen nicht :(
    bei mir spuckt er keinen wert aus nachdem er die datei "ausgelesen" hat :/ funktioniert der script bei euch ?

    das einfügen und txt datei erstellen funktioniert perfekt. wie kann man einstellen, dass er die txt vor dem kopieren komplett leert ?


    es kann auch sein, dass hinter den buchstaben mehr als 3 verschiedene zahlen stehen, ist das ein problem für dein script ?(sry ist mir erst jetzt eingefallen)
    z.b.

    Bc,123,44,99,22,44
    Ji,0.22,33.4,14,774,21
    Lw,48,30.3,22.1,22.3,1
    Ni,11.4,55,44,86,42
    Hk,68,44,51.2,15,75

    *kann man auch hinzufügen, dass er die buchstaben(vorne) auch in eine variable speichert ? damit man später schauen kann, ob er in der richtigen zeile gesucht hat.

    Einmal editiert, zuletzt von Lanealine (3. Mai 2016 um 05:13)

  • es kann auch sein, dass hinter den buchstaben mehr als 3 verschiedene zahlen stehen, ist das ein problem für dein script ?

    Natürlich ist dies ein Problem bei @Kanashius Skript ist das Skript doch auf 3 Variablen fixiert. Anders ist es hier:

    Spoiler anzeigen

    allerdings bekommst du hier einen mit | getrennten Ergebnisstring (Array wäre auch möglich) den du noch in ein Array splitten mußt. Auch hier mußt du dir vor dem Aufruf merken (in eine Variable speichern) was du gesucht hast.

    Edit: Errorhandling hinzugefügt

    4 Mal editiert, zuletzt von autoBert (3. Mai 2016 um 15:04)

  • vielen dank autobert, das habe ich gesucht. allerdings funktioniert dein script NUR wenn ich es alleine in einer neuen .au3 datei starte.
    wenn ich es in meinem programm als function benutze bekomme ich fehler und ich weiß nicht genau warum -.-



    habe jetzt schon einiges probiert aber bekomme es einfach nicht ans laufen als function-.-

  • hey autobert, ich bekomme dein script nicht ans laufen.
    bei mir hapert es in der zeile

    • $sSearchingFor = $aIni[Random(0, UBound($aIni) - 1)][0]

    da hast du was geschrieben, dass eine zufallsreihe rausgesucht wird. wie kann ich das ändern, dass ich da eine buchstabeneingabe abrufen kann ?

    z.b. ich gebe in die inputbox ein "Lw"
    Bc,123,44,99,22,44
    Ji,0.22,33.4,14,774,21
    Lw,48,30.3,22.1,22.3,1
    Ni,11.4,55,44,86,42
    Hk,68,44,51.2,15,75

    dann soll er mir die werte aus Lw in variable speichern.

    die zahlen hinter den buchstaben ändern die anzahl, wie macht man das, dass man kein fehler bei der ausgabe bekommt wenn man jedes mal "Alle" zahlen in arrays speichern will ?
    wenn z.b. nur 2 zahlen hinter den buchstaben stehen, sollen nur 2 arrays erstellt werden.
    bei 5 zahlen sollen 5 arrays erstellt werden.

    wie kann ich diese dann abrufen ?

    bei mir sieht das ganze so aus: wobei $aini keine random zahl im array ist sondern buchstaben( in diesem fall : "Lw")

    3 Mal editiert, zuletzt von Lanealine (4. Mai 2016 um 21:42)

  • Diese Zeile:

    Code
    $sSearchingFor = $aIni[Random(0, UBound($aIni) - 1)][0]

    ermittelt zu Demozwecken einen gültigen "Key" Mit

    Code
    $sFound=_PseudoIniRead($sSearchingFor)

    wird dann das Value abgefragt. Du kannst natürlich $sSearchingFor einen Wert zuweisen oder $sFound=_PseudoIniRead() mit einem gültigen Wert aufrufen. Für "LW" also $sFound=_PseudoIniRead("LW"). $sFound enthält danach einen mit "|" getrennten String aller Werte, da _PseudoIniRead in @Extended die Anzahl der Werte zurückgibt kannst du mit

    Code
    $sSearchingFor="LW"
    $sFound=_PseudoIniRead($sSearchingFor)
    If @extended Then
    	$aRes=StringSplit($sFound,'|',1+2)
    	_ArrayDisplay($aRes,$sSearchingFor)
    EndIf

    ein Array mit allen Werten erzeugen und anzeigen. StringSplit erzeugt ein Array mit (evtl.) mehreren Elementen.

  • sry, aber ich versteh es nicht...


    ich komme so weit das ich die msgbox "fast fertig" angezeigt bekomme. wenn ich die msgbox wegklicke passiert nix mehr und er beendet die function..

    da drin muss ein fehler sein:
    If @extended Then
    $aRes = StringSplit($sFound, '|', 1 + 2)
    _ArrayDisplay($aRes, $aini)
    EndIf

    in diesem schritt soll mir eigentlich ein array erstellt werden mit den einzelnen werten aus der zeile.

    mein script sieht jetzt so aus :

  • Das hier gepostete sieht wie ein Ausschnitt aus einem größeren Skript aus und ist so nicht lauffähig.

    Dein kpmplettes Skript könnte laufen wenn

    • #include <Array.au3> am Anfang hinzugefügt wird. Dieses Include wird benötigt für _ArrayDisplay
    • die Zeile mit MsgBox(0,"fast fertig", "fast fertig") entfernt wird. MsgBox überschreibt (wie alle Funktionen) @Extended

    wie gesagt könnte, aber da du die MsgBox zu sehen bekommen hast, sollte es eigentlich klappen.

    So:

    funktioniert dein geposteter Ausschnitt jedenfalls.

  • Vielen dank :)
    wie immer, sehr gute arbeit autoBert ! :thumbup:


    ich möchte mit den ausgegebenen array werten jetzt rechnen. wie kann ich einstellen,dass es öfters unterschiedlich viele werte in dem array gibt ?
    wenn ich einfach
    $var1
    $var2
    $var3

    ich will z.b.
    wenn $var1 0-40 dann ausgabe "ausreichend"
    wenn $var2 40-60 dann ausgabe "befriedigend"
    wenn $var3 60-80 dann "gut"
    wenn $var4 80-100 dann "sehr gut"

    manchmal gibt es allerdings nur 3 variablen oder auch 5-6. wie schreibe ich das dann am besten in den script ?

    mfg

    Einmal editiert, zuletzt von Lanealine (5. Mai 2016 um 06:25)

  • Und was ergibt: Bc,123,44,99,22,44

    44 an 2. Stelle ist befriedigend
    99 an 3. Stelle ist außerhalb der Festlegungen müßte imho aber mind. "gut" ergeben.
    22 an 4, Stelle ist außerhalb der Festlegungen

    aber stur nach deinen festgelegten Richtlinien:

    schau dir auch dazu das Array $aRL am Anfang an, Werte enstanden durch C&P und S&R.

  • Du machst ein 1-Dimensionales Array, statt 2-Dimensional, und speicherst als Values wieder Arrays ab. Du musst dann natürlich, wenn du dort durchlaufen willst jedesmal auf die Variable zugreifen.
    Beispiel:

    Wie im Beispiel auch gut zu erkennen ist, funktioniert ein _ArrayDisplay dort aber nicht mehr. Auch alle anderen _Array Befehle funktionieren nicht mehr. Du musst immer erst die Variable aus dem ersten Array auslesen, und kannst die _Array Befehle dann auf diese Variable als 1D-Array anwenden.


    PS: Das Script oben von mir war kein fertiges Script, sondern nur eine Sammlung von Befehlen, mit erklärung. Hätte ich vielleicht dazuschreiben sollen.

  • PS: Das Script oben von mir war kein fertiges Script, sondern nur eine Sammlung von Befehlen, mit erklärung. Hätte ich vielleicht dazuschreiben sollen.

    Meine Anmerkung ist nicht an Kritik an dir zu verstehen:

    Natürlich ist dies ein Problem bei @Kanashius Skript ist das Skript doch auf 3 Variablen fixiert. Anders ist es hier:
    ...
    allerdings bekommst du hier einen mit | getrennten Ergebnisstring (Array wäre auch möglich) den du noch in ein Array splitten mußt. Auch hier mußt du dir vor dem Aufruf merken (in eine Variable speichern) was du gesucht hast.

    Dein Lösungsweg war absolut an die Vorgaben des Eröffnungsbeitrages und dem Wissenstand von Lanealine angepasst, ob mein flexibler Lösungsweg für Lanealine der bessere Weg ist, weiß ich noch nicht. Er könnte es werden wenn er sich mehr mit der Hilfe und auch einem Arraytutorial beschäftigt.


    Das Hauptproblem ist, ich weiß bis jetzt noch nicht was er genau erreichen will.


    mfg (auto)Bert

  • sry, ich probier es nochma genauer zu schreiben

    die zahlen sollen zusammen 100 ergeben(prozent).(war mir bis eben noch nicht bewusst)
    z.b. "Lw,20,50,30"
    $note1 = "sehr gut"
    $note2 = "gut"
    $note3 = "befriedigend"
    $note4 = "ausreeichend"
    $note5 = "mangelhaft"
    $note6 = "ungenügend"

    da soll er dann
    $ergebsnis (des schüler z.b. : 55%)
    $var1 = 20
    $var2 = 50
    $var3 = 30
    $var2ges = $var1+$var2

    dannach soll dann angezeigt werden:
    wenn $ergebnis = 0 bis $var1 dann $note3
    wenn $ergebnis = kleiner als $var2ges (aber größer als $var1) dann $note2
    wenn $ergebnis = $var2ges bis 100 dann $note1
    AUSGABE: "gut"

    nochn beispiel mit 6 schritten
    z.b. "Ol,7,10,25,20,20,18"
    $ergebnis (des schülers z.b. 66%)
    $var1 = 7
    $var2 = 10
    $var3 = 25
    $var4 = 20
    $var5 = 20
    $var6 = 18
    $var2ges = $var1+$var2
    $var3ges = $var1+$var2+$var3
    $var4ges = $var1+$var2+$var3+$var4
    $var5ges = $var1+$var2+$var3+$var4+$var5


    wenn $ergebnis = <=$var1 dann $note6

    wenn $ergebnis = <=$var2ges (aber größer als $var1) dann $note5
    wenn $ergebnis = <=$var3ges (aber größer als $var2ges) dann $note4
    wenn $ergebnis = <=$var4ges (aber größer als $var3ges) dann $note3
    wenn $ergebnis = <=$var5ges (aber größer als $var4ges) dann $note2
    wenn $ergebnis = >$var5ges dann $note1
    AUSGABE: "gut"

    wie kann ich mir das dann in eine inputbox ausgeben lassen ?
    ungefährt so hast du es in dem zuletztgenannten beispiel gemacht. aber wie schreibe ich das auf ? kann ich in arrays aus variablen addieren lassen ? z.b. $aRL[0][0] = $var1+$var2
    das problem(zumindest für mich) ist, dass es je nach durchgang unterschieldich viele variablen in dem array gibt.

    ich hoffe jetzt isses anschaulicher geworden :)

    2 Mal editiert, zuletzt von Lanealine (5. Mai 2016 um 15:17)

  • Sag mal, was du als Eingabe (insgesamt) bekommst, und was das ergebnis sein soll. Momentan siehts für mich so aus, als würdest du da nen riesen umweg gehen.
    Wenn du z.b. Sagen willst Note 1: 100-90 Punkte, Note 2: 90-70 Punkte,... (oder mit Prozentzahlen und du gibst irgendwo die gesamte Punktzahl an.)
    Dazu dann eine Liste, in die du die Punkte für die Schüler eintragen kannst, und dann soll der die Noten angeben. Hab ich das richtig verstanden?
    Wenn ja, nimm die Noten als Array und geh für jeden Schüler dieses Array durch. Müsste schneller sein.

    Falls die annahme von mir falsch ist, korrigier mich bitte, und schreib mal so wie ich jetzt hier hin, wie das aussehen soll.

    Wenn man wissen will, in welchem Bereich etwas liegt: