INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

XML auswerten mit Regular Expressions oder doch Scan from String



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.04.2020, 08:57
Beitrag #1

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
XML auswerten mit Regular Expressions oder doch Scan from String
Servus Zusammen,

akuell habe ich ein wenig zeit und schaue ein älteres Projekt an. Ich bin einen anderen Weg gegangen und habe die Daten einzeln zerlegt, klappt erstmal ganz gut, anstatt 2,2 Sekunden lesen brauche ich noch 31 ms der aktuell 80 Parameter.. Ich stoße nur auf einige (hoffentlich) kleinere Probleme und suche hier um Hilfe.

Mein erster Versuch (mit Regular Expressions.vi) klappt ganz gut, der erste Teil war im nachhinein dann zu aufwendig programmiert und im 2ten Teil (mit Regular Expressions2.vi) gekürzt worden.
Den ersten versuch habe ich mal behalten, evtl geht das ohne 'Scan From String' direkt mit der 'Match Regular Expression', die finde ich aber recht kompliziert zu formulieren und habe es vertagt Tongue

Der Versuch es nur mit 'Scan From String' zu meistern ist kläglich gescheitert. Muss in 'Scan From String' alles (jedes Zeichen im String) definiert sein?

Als Platzhalter oder Markierung wird in der XML gelegentlich ein '???' verwendet, damit man da nochmal drüber schaut, das würde ich gerne abfangen. Wobei ich das wohl in eine separate Datei auslager, hat da drin nichts verloren und macht es nur Komplizierter..

Meine Fragen:
-Kann man Platzhalter in 'Scan From String' einbauen, ohne diese als Ausgang zu haben oder muss da wirklich jedes Zeichen in einem Block abgefragt werden?
-Gibt es eine Hilfe (zB Website, Tool) für Regular Expressions?
und das größte Problem
Es gibt bei manchen Parametern (und bei manchen Geraete) gelegentlich ein Liste (Array) das wird aber nur aufgeführt, wenn das Gerät/ der Parameter das auch benötigt. In der XML ist das sonst einfach leer.
Wie fragt man in 'Regular Expressions' oder/und 'Scan from String' ein Array ab?

MfG Timo


Angehängte Datei(en)
13.0 .vi  mit Regular Expressions2.vi (Größe: 133,96 KB / Downloads: 198)

13.0 .vi  mit Regular Expressions.vi (Größe: 149,61 KB / Downloads: 202)

13.0 .ctl  AlleParameterv0.1.ctl (Größe: 16,45 KB / Downloads: 199)

13.0 .vi  mit Scan from Stringvi.vi (Größe: 35,79 KB / Downloads: 201)

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.04.2020, 09:07 (Dieser Beitrag wurde zuletzt bearbeitet: 02.04.2020 09:19 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: XML auswerten mit Regular Expressions oder doch Scan from String
Hallo Timo,

Zitat:Kann man Platzhalter in 'Scan From String' einbauen, ohne diese als Ausgang zu haben oder muss da wirklich jedes Zeichen in einem Block abgefragt werden?
ScanFromString erwartet einen exakten Formatstring, Platzhalter sind da schwierig.
Entweder benutzt du für einen String wie "123 Wort 4.567" also ein Format wie "%d %s %.;%f" - oder "123 Wort %.;%f" wenn du nur den Floatwert benötigst…

Zitat:Gibt es eine Hilfe (zB Website, Tool) für Regular Expressions?
Jede Menge, einfach mal mit deiner bevorzugten Suchmaschine suchen.
http://www.regex101.com
https://rubular.com/

Zitat:Es gibt bei manchen Parametern (und bei manchen Geraete) gelegentlich ein Liste (Array) das wird aber nur aufgeführt, wenn das Gerät/ der Parameter das auch benötigt. In der XML ist das sonst einfach leer. Wie fragt man in 'Regular Expressions' oder/und 'Scan from String' ein Array ab?
Indem man sich ein subVI baut, welches das komplette Array-Tag als Input bekommt und darin in einer Schleife alle Arrayelemente scannt und in ein Stringarray überführt.

Tipp:
Ich habe mir eine eigene Bibliothek geschrieben, die XML-ähnliche Dateien erzeugt (zum einfacheren Speichern/Verwalten von Parametern). Da habe ich eine Funktion, die nach einem Tag in der Art von <TAG>WERT</TAG> sucht und mir den WERT zurückgibt. Dank Polymorphie und Angabe eines erwarteten Datentyps bekomme ich den WERT auch im erwarteten Datentyp zurück. So sieht die Kernfunktion aus:
   

Dieser WERT kann wiederum andere Tags enthalten, wie in deinem Beispiel:
Code:
<Geraet>
   <Geraetecode>%[^<]</Geraetecode>
   <Geraetename>%[^<]</Geraetename>
   <Geraeteparameter>%[^G]Geraeteparameter>
   <ServiceModus>%[^<]</ServiceModus>
</Geraet>
Ich rufe diese Funktion also mit "Geraet" auf, mit dem gelieferten Wert dann noch mal mit Geraetecode, Geraetename und ServiceModus…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.04.2020, 12:12
Beitrag #3

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: XML auswerten mit Regular Expressions oder doch Scan from String
Danke Gerd,

Zitat:ScanFromString erwartet einen exakten Formatstring, Platzhalter sind da schwierig.
So war auch meine Erfahrung gestern/heute Sad

Zitat:Jede Menge, einfach mal mit deiner bevorzugten Suchmaschine suchen.
Schau ich mir mal an, danke.
Ich habe mir die offiziell verlinkte Website mal angeschaut, ist das ein eigenes Studienfach? Das ist eine gigantische Anleitung ..

Zitat:Indem man sich ein subVI baut, welches das komplette Array-Tag als Input bekommt und darin in einer Schleife alle Arrayelemente scannt und in ein Stringarray überführt.
An so etwas bin ich gerade dran, 'Match Pattern' funktioniert ganz gut, muss es nur noch in mein Cluster verarbeiten. Lässt sich ganz gut in For-Schleifen abarbeiten. Habe die vorabversion mal angehängt.

Danke für die Tipps.
Die integrierten XML vi's zu nehmen war echt keine gute Idee, wieso gibts die überhaupt? Dann doch lieber gar nicht, oder?

MfG Timo


Angehängte Datei(en)
13.0 .vi  mit Match Pattern.vi (Größe: 37,03 KB / Downloads: 193)

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.04.2020, 12:27 (Dieser Beitrag wurde zuletzt bearbeitet: 02.04.2020 12:29 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: XML auswerten mit Regular Expressions oder doch Scan from String
Hallo Timo,

Zitat:Ich habe mir die offiziell verlinkte Website mal angeschaut, ist das ein eigenes Studienfach? Das ist eine gigantische Anleitung ..
Ich kenne mit mit RegEx nicht gut aus und bin auch jedesmal wieder erschlagen von der Komplexität…

Zitat:Habe die vorabversion mal angehängt.
Da könntest du aber noch viel verbessern:
- Wenn du in den Stringarray-Konstanten nicht so viele leere Strings drin hättest, bräuchtest du in den Auswerte-FOR-Loops nicht extra auf "leerer String" testen…
- Mehr subVIs, insbesondere für diese XML-Parse-Funktionen, statt copy&paste…

Zitat:Die integrierten XML vi's zu nehmen war echt keine gute Idee, wieso gibts die überhaupt? Dann doch lieber gar nicht, oder?
Mit denen habe ich noch nicht gearbeitet, sie werden aber für NI-eigene Sachen prima funktionieren! (Beispiel: mit LabVIEW Daten nach XML und später wieder zurück in LabVIEW-Datentypen konvertieren…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.04.2020, 16:01
Beitrag #5

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: XML auswerten mit Regular Expressions oder doch Scan from String
Servus Gerd,

danke für die Kritik, ich war ja auch mitten drin, zumindest mache ich das immer im BD und erstelle nach erfolgreichem Funktionstest dann ein SubVI. Wink
Anbei habe ich es jetzt geschafft alles Auszulesen, die SubVI-Icons mach ich morgen schön, die Zeit rennt, wenn man so am durchtesten ist Big Grin

diese RegEx kann man aufziehen, hat das irgendeine Funktion? Da waren bei mir nie Ergebnisse drin und in der Hilfe finde ich auch nichts dazu ..

Vielleicht schaffe ich das Morgen die XML auch wieder zu schreiben, irgendwelche Warnungen oder Tipps vorweg? Smile

MfG Timo


Angehängte Datei(en)
0.0 .zip  XML mit Match Pattern_LV13.zip (Größe: 75,96 KB / Downloads: 195)

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  String in Datei (txt oder csv) Katsching 15 13.648 21.12.2011 11:07
Letzter Beitrag: Katsching
  Leeres und doch gefülltes Array von Cluster HaDa 12 10.196 22.11.2010 09:20
Letzter Beitrag: HaDa
  String durchsuchen mit boolean expressions holistic 1 4.104 08.11.2010 15:45
Letzter Beitrag: unicorn

Gehe zu: