Page 1 of 1
Zeichen aus Var entfernen
Posted: 18 May 2020, 05:18
by nacken012
Hallo, ich versuche gerade per OCR Erkennung aus einem Spiel Zahlen zu bekomme, das sind die Stückzahlen einer Sammlung.
Die Zahlen werden auch perfekt erkannt nur es stehen immer wieder verschiedene Sonderzeichen mit in dem Text.
Beispiel was ich erhalte:
(13318 @ x12838 x12936 x11462 x12580
Nun suche ich eine Möglichkeit aus dem Clipboard wo der Text reinkopiert wird, alle Sonderzeichen zu entfernen, also eigentlich alles
bis auf die Zahlen selber, denn die bräuchte ich als einzelne Variablen das dann so aussieht nachher
Var1 = 13318
Var2 = 12838
Var3 = 11462
Var4 = 12580
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 05:29
by BNOLI
Wenn wir beide jetzt RegEx könnten, wäre das Problem praktisch schon gelöst. Ansonsten kannst du natürlich die Variable nach Zeichen parsen die nicht dem
Asc()-Wert einer Zahl entsprechen, oder den Befehl
If var is not type benutzen, oder auf Teufel komm raus
StrReplace()n
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 06:21
by KHA
vlt, so:
Code: Select all
myzahlen := "(13318 @ x12838 x12936 x11462 x12580)"
myNewZahlen := Trim(RegExReplace(myZahlen, "\D", " "))
myNewZahlen := RegExReplace(myNewZahlen, "\s+", " ")
EinzelneZahlen := StrSplit(myNewZahlen, A_Space)
for k, v in EinzelneZahlen
MsgBox,% Var%k% := v
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:00
by just me
'Optimierte' Version
:
Code: Select all
OCR := "(13318 @ x12838 x12936 x11462 x12580"
Zahlen := StrSplit(Trim(RegExReplace(OCR, "\D+", " ")), " ")
Anzahl := Zahlen.Length()
For Each, Zahl In Zahlen
MsgBox, 0, Zahl %A_Index% von %Anzahl%, %Zahl%
Und wenn's noch etwas mehr sein darf:
Code: Select all
Anzahl := (Zahlen := StrSplit(Trim(RegExReplace(OCR, "\D+", " ")), " ")).Length()
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:17
by nacken012
Vielen Dank, das klappt mit der Msgbox Anzeige super, aber irgendwie bin ich wohl zu blöd das in 4 Variablen zu speichern.
Sinn ist, die 4 verschiedenen Zahlen in einem Edit Feld einzutragen.
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:27
by just me
StrSplit() liefert die Werte in einem
Array.
Wenn der Name des Arrays
Var ist, finden sich die Werte nicht in
Var1,
Var2,
Var3 ...
sondern in
Var[1],
Var[2],
Var[3] ...
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:42
by KHA
nacken012 wrote: ↑18 May 2020, 07:17
Vielen Dank, das klappt mit der Msgbox Anzeige super, aber irgendwie bin ich wohl zu blöd das in 4 Variablen zu speichern.
Die sind bereits in Variablen gespeichert und es sind in deinem Beispiel 5 Variablen
z.B
Code: Select all
OCR := "(13318 @ x12838 x12936 x11462 x12580"
Anzahl := (Zahlen := StrSplit(Trim(RegExReplace(OCR, "\D+", " ")), " "))
; Array Version
MsgBox, % Anzahl[1]
MsgBox, % Anzahl[2]
MsgBox, % Anzahl[3]
MsgBox, % Anzahl[4]
MsgBox, % Anzahl[5]
; oder in Variable speichern
For Each, Zahl In Zahlen
Var_%A_index% = %Zahl%
MsgBox, % Var_1
MsgBox, % Var_2
MsgBox, % Var_3
MsgBox, % Var_4
MsgBox, % Var_5
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:52
by BNOLI
just me wrote: ↑18 May 2020, 07:27
Wenn der Name des Arrays
Var ist, finden sich die Werte nicht in
Var1,
Var2,
Var3 ...
sondern in
Var[1],
Var[2],
Var[3] ...
... vll kannst du mir erklären wann (bzw. in welchem Kontext) man
Var[1] < >
Var.1 nutzen sollte (denn beide würden im Beispiel funktionieren)? Danke
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 07:54
by nacken012
Vielen lieben Dank, jetzt klappt alles perfekt
Re: Zeichen aus Var entfernen
Posted: 18 May 2020, 08:15
by BNOLI
@nacken012 just me's code liefert dir genau diese liste 'am Stück'.
Code: Select all
inOCR := "(13318 @ x12838 x12936 x11462 x12580"
Zahlen := StrSplit(Trim(RegExReplace(inOCR, "\D+", " ")), " ")
For Each, Zahl In Zahlen
index .= Zahlen[A_Index] "`n" ; index concatinieren
MsgBox % outOCR := SubStr(index,1,-1) ; LF char abschneiden
Re: Zeichen aus Var entfernen
Posted: 19 May 2020, 03:06
by just me
Moin
@BNOLI,
in AHK 1.1 haben alle Benutzerobjekte eine weitestgehend identische Struktur. Sie alle sind 'assoziative Arrays' mit einer Grundausstattung von Methoden. Auch wenn die Doku zwischen Arrays, Klassen und sonstigen Objekten unterscheidet, sind sie im Kern identisch. Man kann deshalb Alle sowohl mit der
Code: Select all
MeinArrayKlassenObjekt[Schlüssel] ; Array-Syntax
als auch der
Code: Select all
MeinArrayKlassenObjekt.Schlüssel ; Objekt-Syntax
ansprechen, wenn der Wert im Schlüssel es zulässt (man kann ja so ziemlich alles als Schlüsselwert verwenden).
Ich habe mir angewöhnt, für den Zugriff auf Schlüssel/Wertpaare fast ausschließlich die Array-Synta zu nutzen. Die hat bei mehrdimensionalen Arrays auch 'positive' Nebeneffekte.
Übrigens:
Code: Select all
For Each, Zahl In Zahlen
index .= Zahlen[A_Index] "`n" ; index concatinieren
=
Code: Select all
For Each, Zahl In Zahlen
index .= Zahl "`n" ; index concatinieren
Re: Zeichen aus Var entfernen
Posted: 19 May 2020, 06:41
by BNOLI
Danke