Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

heimer61
Posts: 8
Joined: 09 Feb 2020, 16:10

Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 00:53

Guten Morgen zusammen,
ich versuche den Inhalt meiner Zwischenablage zu durchsuchen und den Inhalt dann in mehrere Variablen zu schreiben. Der Inhalt aus der Zwischenablage sind Daten aus unserem Auftragslenkungstool und quasi auch variable Werte.

Die Werte in der Zwischenablage befinden sich in einem riesigen Fließtext.

Beispiel: <Auftragsnummer_AG>7771234567</Auftragsnummer_AG>

In den Variablen möchte ich quasi nur das speichern, was sich zwischen der <> </> befindet.

Code: Select all

A := Clipboard 
Auftragsnummer := InStr (A, <Auftragsnummer_AG>)
MsgBox 0x42030, Hinweis, %Auftragsnummer%
Return
Könnte man das so lösen? Und was muss ich InStr mitgeben damit er nach dem gefunden Suchtext z.B. ab Pos 1 des gefundenen Werts die nächstes 10 Zeichen in die neue Variable schreibt?
effel
Posts: 544
Joined: 16 Jan 2018, 13:34

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 03:43

so etwas?

Code: Select all

msgbox % TextCleaner("<Auftragsnummer_AG>7771234567</Auftragsnummer_AG>")
msgbox % TextCleaner("a-z A-Z 0123456789 äöü")


TextCleaner(string) {
;string:= "xStr() :\%<>/\|!?* for general Müller      Jörg Bär  text extraction and parsing XML / HTML"
aa:=RegExReplace(string, "[^0-9]")  ;- <<< keep only these characters
filename:=RegExReplace(aa,"\x20{2,}"," ")     ;- keep only one space
Return filename
}

heimer61
Posts: 8
Joined: 09 Feb 2020, 16:10

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 04:23

Leider bin ich blutiger Anfänger in AHK.

Für mich sieht es so aus, als ob dort dann aus <Auftragsnummer_AG>7771234567</Auftragsnummer_AG> nur alle Zeichen entfernt werden, die keine Zahlen sind.
Die Auftragsnummer ist in meinem Fall ja immer eine andere.

Ich habe den kompletten Inhalt der Zwischenablage in der Variable A
Dort möchte ich mehrere Werte in einer Variable speichern
Die Werte sind immer in eckigen Klammern eingefasst

Beispiele:

<Auftragsnummer_AG>7771234567</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
usw.

Die Werte zwischen den Klammern sind in jedem Auftrag unterschiedlich.

Davon sollen bestimmte gesucht werden und anschließend in mehreren Variablen gespeichert werden damit ich sie Anschluss weiter verwerten kann.
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 04:58

Moin,

sieht aus wie XML. Man kann das eventuell über Microsoft's XML-API verarbeiten. Wenn aber jeweils nur ein einfaches, nicht geschachteltes Attributpaar in der Zwischenablage enthalten ist, sollte auch Folgendes reichen:

Code: Select all

#NoEnv
; A := Clipboard
A =
(Join`r`n
<Auftragsnummer_AG>7771234567</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
)

Ausgabe := ""
Trenner := ","
Suchbegriffe := "<Auftragsnummer_AG>`t<Anlagen_vorhanden>`t<Status>"
Loop, Parse, Suchbegriffe, `t
{
   RegExMatch(A, A_LoopField . "\K[^<]+", Treffer)
   Ausgabe .= Trenner . Treffer
}
Ausgabe := SubStr(AUsgabe, 2) ; ersten Trenner überspringen

MsgBox, %Ausgabe%
Es lässt sich auch (einfacher ?) mit InStr() / SubStr() lösen.
heimer61
Posts: 8
Joined: 09 Feb 2020, 16:10

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 05:23

Danke. Schade das ich nicht so wirklich verstehe was in euren Beispielen so passiert oder richtig ausdrücken kann, was ich gerade versuche.

Code: Select all

A := Clipboard 											;hier lese ich die Zwischenablage in Variable A ein
Auftragsnummer := InStr (A, <Auftragsnummer_AG>) 		;hier möchte ich nach <Auftragsnummer_AG> suchen und die nächsten 10 Zeichen in Variable Auftragsnummer schreiben - weiß aber nicht wie ich die Zeile vervollständigen muss
MsgBox 0x42030, Hinweis, %Auftragsnummer%				;hier habe ich eine Messagebox um zu testen ob die Variable korrekt eingelesen wurde
Return	
Und dann würde ich das einfach für jedes Attribut der Daten in der Zwischenablage wiederholen.
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern  Topic is solved

14 Jun 2021, 06:03

Code: Select all

#NoEnv
; A := Clipboard
A =
(Join`r`n
<Auftragsnummer_AG>7771234567</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
)

Auftragsnummer := WertErmitteln(A, "<Auftragsnummer_AG>")
Anlagen := WertErmitteln(A, "<Anlagen_vorhanden>")
MsgBox, %Auftragsnummer% - %Anlagen%
ExitApp

WertErmitteln(Zeichenkette, Suchbegriff) {
   Treffer := ""
   Pos1 := InStr(Zeichenkette, Suchbegriff)
   If (Pos1) { ; gefunden
      Pos1 += StrLen(Suchbegriff)
      Pos2 := InStr(Zeichenkette, "</" . SubStr(Suchbegriff, 2), 0, Pos1)
      If (Pos2) ; gefunden
         Treffer := SubStr(ZeichenKette, Pos1, Pos2 - Pos1)
   }
   Return Treffer
}
Verständlicher?
(Mit RegExMatch() wäre es viel kürzer.)
heimer61
Posts: 8
Joined: 09 Feb 2020, 16:10

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 06:22

Super - Das war viel besser erklärt und hat jetzt funktioniert :D

Ihr seid echt ein ganz tolles Forum :-)
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: Zwischenablage durchsuchen und Werte in unterschiedlichen Variablen speichern

14 Jun 2021, 14:14

Davon sollen bestimmte gesucht werden und anschließend in mehreren Variablen gespeichert werden damit ich sie Anschluss weiter verwerten kann.
Falls Du es in mehreren Variablen möchtest, wäre das ein Weg von vielen... :)

Code: Select all

#NoEnv
; A := Clipboard
A =
(Join
<Auftragsnummer_AG>7771234567</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
<Auftragsnummer_AG>7771234568</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
<Auftragsnummer_AG>7771234569</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
<Auftragsnummer_AG>7771234570</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
<Auftragsnummer_AG>7771234571</Auftragsnummer_AG>
<Anlagen_vorhanden>Ja</Anlagen_vorhanden>
<Status>Unterbrochen</Status>
)
Treffer := AuftragsnummernErmitteln(A)
;Einzelausgabe
MsgBox, % Treffer[1] ", " Treffer[2] ", " Treffer[3] ", " Treffer[4] ", " Treffer[5] 

;Ausgabe aller Treffer per loop
loop, % Treffer.count() - 1 
	msgbox % A_Index ". Auftragsnummer: " Treffer[A_Index]

ExitApp

AuftragsnummernErmitteln(Zeichenkette) {
 	 Treffer := [] ;Array definieren
	 for k,v in StrSplit(Zeichenkette, "</Auftragsnummer_AG>")
   	  Treffer.push(SubStr(v, -9))
	 Return Treffer
}

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 54 guests