Meldungscodes in Meldungen wandeln...

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Meldungscodes in Meldungen wandeln...

16 Oct 2013, 17:33

Hallo zusammen,

in unserem Arbeitsalltag gehören XMLs von verschiedenen Anbietern. Diese beinhalten immer nur Meldungscodes die aber auch alle eine eigentliche bedeutung haben. Sowas sieht z.B. so aus:

Code: Select all

LIN+++PRODUCT DATA'
RFF+AS'
RFF+FSC:9760'
LIN+++NETWORK DATA'
RFF+FSF:BEC::1'
LIN+++PRODUCT DATA'
RFF+AS'RFF+FSC:9763'
LIN+++NETWORK DATA'
RFF+FSF:T21::0'
LIN+++NETWORK DATA'
RFF+FSF:T22::0'
LIN+++NETWORK DATA'
RFF+FSF:T62::1'
LIN+++PRODUCT DATA'
RFF+AS'RFF+FSC:9760'
Nun möchte ich gerne das ganze lesbar machen... also die Codes wie z.B. 9760 oder 9763 oder T21 entsprechend umwandeln.

Ich dachte mir, ich erstelle ein Array mit allen Codes und dessen Text. Sieht dann so aus:

Code: Select all

Meldungen:={"9760":"Service ABC gebucht","9763":"Produkt 123 gebucht","T21":"Sperre 2222 aktiv"}
Ablauf wäre dann wohl 1. Kopieren des kompletten XML 2. Parsen... 3. Ergbenis ausgeben

Beim Parsen hab ich probleme. Ich weiß da grad nicht wie ich anfangen muss.

Wenn ich also in der Var "XMLKomplett" das XML habe und es parsen will dann so:

Code: Select all

Loop, parse, XMLKomplett, % "'"
Nur wie gehts dann weiter?

Wenn ich nun im A_LoopField diesen Text habe: "RFF+FSC:9760'"
Wie bekomm ich dann einen Abgleich mit dem Array hin und erhalten entsprechend das Ergebnis?

Oder sollte man an sowas ganz anders ran gehen?

Für Erklärungen bin ich wie immer sehr Dankbar!

MfG
fump
User avatar
nnnik
Posts: 3453
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Meldungscodes in Meldungen wandeln...

17 Oct 2013, 00:57

Du könntest den Loop auch weglassen.
Wirklich wichtig ist nur, dass du per For Loop alle Ersetzungen durchgehst:

Code: Select all

For Code,Replacement in Meldungen
StringReplace,XMLKomplett,XMLKomplett,%Code%,%Replacement%,1
Recommends AHK Studio
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Meldungscodes in Meldungen wandeln...

17 Oct 2013, 02:33

Hi nnnik!

Danke für deinen Input, wenn ich das so umsetze schaut das Ergebnis so aus:

Code: Select all

RFF+FSC:Service ABC gebucht'
LIN+++NETWORK DATA'
RFF+FSF:BEC::1'
LIN+++PRODUCT DATA'
RFF+AS'
RFF+FSC:Produkt 123 gebucht'
LIN+++NETWORK DATA'
RFF+FSF:Sperre 2222 aktiv::0'
LIN+++NETWORK DATA'
Wie bekommt man es so hin das all das was keine Übereinstimmung hat gelöscht wird und das vor und nach der Übereinstimmung ebenfalls entfernt wird?

Am Ende sollte es halt so aussehen:
Service ABC gebucht
Produkt 123 gebucht
Sperre 2222 aktiv
User avatar
nnnik
Posts: 3453
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Meldungscodes in Meldungen wandeln...

17 Oct 2013, 03:20

Da musst du dann mit RegExReplace arbeiten:

Code: Select all

For Code,Replacement in Meldungen
XMLKomplett:=RegExReplace(XMLKomplett,"m)^.*" Code ".*$",Replacement)
Recommends AHK Studio
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Meldungscodes in Meldungen wandeln...

17 Oct 2013, 03:46

Okay das rennt :)

Noch eine Frage.
Wie erstell ich ein Array mit Werten aus einer INI?

Wenn ich also eine INI habe:
[Meldungen]
9760=Service ABC gebucht

usw.

Das geht doch auch per Parsen oder? Kannst du mir da bitte ein Beispiel geben?

Danke!
Alibaba
Posts: 473
Joined: 29 Sep 2013, 16:15
Location: Germany

Re: Meldungscodes in Meldungen wandeln...

17 Oct 2013, 05:32

So hier:

Code: Select all

Meldungen := Object()
FileRead, file, test.ini
Loop, Parse, file, `n`r, %A_Space%%A_Tab%
{
        pos := InStr(A_LoopField, "=")
	if (!pos or (SubStr(A_LoopField, 1, 1) = "["))
		continue
	Meldungen[SubStr(A_LoopField, 1, pos - 1)] := SubStr(A_LoopField, pos + 1)
}
MsgBox % print_r(Meldungen)
ExitApp




;---- print_r() by SAPlayer ----

print_r(input){
   output := ""
   if(!IsObject(input))
      return input
   this := input
   tabs := ""
   ThisArray:
   if(IsObject(this)){
      output .= "Array`n" tabs "(`n"
      tabs .= "`t"
      for i, k in this
      {
         if(IsObject(k)){
            this := k
            output .= tabs "[" i "] => "
            gosub ThisArray
         }
         else
            output .= tabs "[" i "] => " k "`n"
      }
      tabs := SubStr(tabs, 1, -1)
      output .= tabs ")`n"
   }
   return Trim(output, "`n")
}
"Nothing is quieter than a loaded gun." - Heinrich Heine

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 3 guests