OBS/Adminhilfe/RegularExpressions: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) (→Delphi) |
Nimz (Diskussion | Beiträge) (→Delphi) |
||
| Zeile 36: | Zeile 36: | ||
*[http://docwiki.embarcadero.com/Libraries/Rio/de/System.RegularExpressions.TRegEx.IsMatch TRegEx.IsMatch] | *[http://docwiki.embarcadero.com/Libraries/Rio/de/System.RegularExpressions.TRegEx.IsMatch TRegEx.IsMatch] | ||
*[http://docwiki.embarcadero.com/Libraries/Rio/de/System.RegularExpressions.TRegExOptions TRegExOptions] | *[http://docwiki.embarcadero.com/Libraries/Rio/de/System.RegularExpressions.TRegExOptions TRegExOptions] | ||
---- | |||
===MySQL=== | ===MySQL=== | ||
Version vom 19. Februar 2024, 13:51 Uhr
Dies ist eine zugriffsgeschützte Seite.
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
Kurze Erklärung zum Arbeiten mit Regulären Audrücken in Delphi und MySQL.
Arbeiten mit regulären Ausdrücken
Reguläre Ausdrücke sind ein Musterabgleich für Zeichenketten. Delphi und MySQL verfügen über eigene Funktionalitäten, um mit Regulären Ausdrücken zu arbeiten. Für die Erkennung muss ein entsprechendes Muster mitgegeben werden. Gute Beispiele finden sich in den externen Links für MySQL und regexr (bessere visuelle Darstellung).
externe Links
Anwedungsbeispiele
EClass: Finden eines bestimmten Schemas
EClass definiert Codes für die Zuordnung von Texten und Warengruppenbezeichnungen in verschiedenen Sprachen und ermöglicht so den Datenaustausch von Artikeldaten über verschiedene Sprachen mit nur einer Datei.
Ident ist eine 6-stellige Zeichenkette mit drei Buchstaben gefolgt von drei Zahlen. Dies lässt sich mit entsprechenden Sets abbilden:
[A-Z][A-Z][A-Z][0-9][0-9][0-9]
Da dies aber recht lang werden kann, kann dies gekürzt werden. Dazu lässt sich die Wiederholung in geschweiften Klammern angeben. In diesem Fall ist es in beiden Fällen {3}.
[A-Z]{3}[0-9]{3}
Wenn wir jetzt noch Zeichenketten ignorieren möchten, die noch weitere Zeichen beinhalten (z. B. bei ABCD123456 würde BCD123 dem Muster entsprechen), geben wir jetzt noch an, dass diese sechs Zeichen auch die vollständige Zeichenkette mit Beginn (^) und Ende ($) ist.
^[A-Z]{3}[0-9]{3}$
Ein anderer Fall wäre der Irdi-Wert. Dieser setzt sich aus anderen Angaben zusammen und sieht so aus: 123-4#56-ABC789#123. Neben Sets lasen sich feste Zeichen auch einfach als solche angeben. In diesem Fall Minus und Raute/Hashtag. Dies könnte dann wie folgt aussehen:
^[0-9]{4}-[0-9]#[0-9]{2}-[A-Z]{3}[0-9]{3}#[0-9]{3}$
Delphi
lIsEClass := TRegex.IsMatch(cMerkmalWert, '^[A-Z]{3}[0-9]{3}$');
Beispieldaten:
cMerkmalWert = 'WDA057' -> lIsEClass = true; cMerkmalWert = 'BRUNNEN' -> lIsEClass = false;
siehe auch:
MySQL
In MySQL kann mit REGEXP, REGEXP_LIKE oder RLIKE selektiert werden.
SELECT mm_classificationsystem, mm_classmerkmalwert
FROM m_merkmale
WHERE mm_classmerkmalwert REGEXP '^[A-Z]{3}[0-9]{3}$';
SELECT mm_classificationsystem, mm_classmerkmalwert
FROM m_merkmale
WHERE mm_classmerkmalwert RLIKE '^[A-Z]{3}[0-9]{3}$';
SELECT mm_classificationsystem, mm_classmerkmalwert
FROM m_merkmale
WHERE REGEXP_LIKE(mm_classmerkmalwert, '^[A-Z]{3}[0-9]{3}$');
SELECT mm_classificationsystem, mm_classmerkmalwert
FROM m_merkmale
WHERE REGEXP_LIKE(mm_classmerkmalwert, '^[A-Z]{3}[0-9]{3}$', 'c'); #case-sensitive (siehe Hinweis unter Punkt 1)
SELECT mm_classificationsystem, mm_classmerkmalwert
FROM m_merkmale WHERE
REGEXP_LIKE(mm_classmerkmalwert, '^[A-Z]{3}[0-9]{3}$', 'i'); #case-insensitive
Beispieldaten:
| mm_classificationsystem | mm_classmerkmalwert |
|---|---|
| ECLASS-6.2 | CAA133 |
| ECLASS-6.2 | weiß |
| ECLASS-10.1 | BRUNNEN |
| ECLASS-6.2 | DAA349 |
| ECLASS-7.1 | orange |
gefiltert mit regulären Ausdrücken:
| mm_classificationsystem | mm_classmerkmalwert |
|---|---|
| ECLASS-6.2 | CAA133 |
| ECLASS-6.2 | DAA349 |
siehe auch:
Teil-String anhand eines bestimmten Schemas auslesen
Nehmen wir an, wir haben eine Auflistung mit Vorgangsnummer für Aufträge und Reparaturaufträge und den Kundennamen als einzelne Zeichenkette und mögliche weitere Informatioen am Ende der Zeichenkette. Auch ist die Formatierung nicht durchgängig.
Max Mustermann R13687 Muster GmbH 238077 Herr Muster R90222 Boris Beispiel Moritz Musterknabe Auftrag 302248/storniert
Um an die Vorgangsnummern zu kommen, lässt sich wieder mit regulären Ausdrücken arbeiten. Delphi und MySQL haben sogar beide die Möglichkeit entsprechende Zeichenketten anhand eines Musters zu extrahieren. Aber zunächst einmal wieder die Definition eines passenden Ausdrucks zur Erkennung der Vorgangsnummern. Reparaturaufträge bekommen als führendes Zeichen immer ein R. Werden Produktionsaufträge verwendet, sind auch P als mögliches Zeichen in der Auflistung zu finden. Mit Lageraufträgen kommt noch ein L hinzu. Entsprechend kann das Set für den führenden Buchstaben angegeben werden oder man sucht nach Vorgangstyp entsprechen einzeln.
Nur Repas:
R[0-9]{5}
Nur Produktionsaufträge:
P[0-9]{5}
Nur Lageraufträge:
L[0-9]{5}
Wollten wir dies zusammenfassen in einem Set:
[LPR][0-9]{5}
Und was ist mit Aufträgen?
[0-9]{6}
Und wenn wir daraus eine Abfrage machen möchten? Hier lassen Reguläre ausdrücke auch variable Mengenangaben zu. Ein Bereich wäre z. B. {5,6} für 5 bis 6 vorkommen. So lässt sich auch die Suche über alle Auftragstypen kombinieren.
[LPR]{0,1}[0-9]{5,6}
Die Angabe {0,1} lässt sich ebenfalls noch kürzer darstellen mit einem Fragezeichen
[LPR]?[0-9]{5,6}
Delphi
Mit der Matches-Methode von TRegEx, lässt sich eine Sammlung der Treffer auslesen. Die Sammlung ist ein Record mit Count und Item-Propery (siehe Links unter Codebeispiel).
Da dies im Beispiel wohl in einer Query oder Liste laufen wird das Beispiel entsprechen mit Schleife:
while (not qQuery.Eof) do begin
rMatches := TRegEx.Matches(qQuery.A2C('db_feld'), '[LPR]?[0-9]{5,6}');
for var i := 0 to rMatches.Count-1 do begin
cMatch := rMatches.Item[i].Value;
//hier irgendetwas mit dem Wert in cMatch machen
end;
qQuery.Next;
end;
Entsprechend des Beispiels sollte dies dann im Ergebnis für jeden Datensatz genau ein Eintrag in rMatches enthalten sein. Der Wert ist dann entsprechend:
R13687 238077 R90222 302248
siehe auch:
MySQL
Die MySQL-Funktion REGEXP_SUBSTR ermöglicht das Auslesen von Teilen des Wertes (Datenbankfeld?) im ersten Parameter. Die muss für ein Feld eventuell mehrmals ausgeführt werden, je nachdem, wie die Daten aussehen. Spannend ist dazu dann Parameter 4 "occurence". Hier die Optionalen Parameter ausgelistet:
- Parameter 3: pos -> Position, an der begonnen werden soll
- Parameter 4: occurence -> der x-te werte, der genommen werden soll
- Parameter 5 match_type -> Vorgabe wie der Abgleich stattfinden soll
SELECT REGEXP_SUBSTR(db_feld, '[LPR]?[0-9]{5,6}') FROM db_table;
SELECT REGEXP_SUBSTR(db_feld, '[LPR]?[0-9]{5,6}', 1, 1, 'c') FROM db_table; #case-sensitive (siehe Hinweis unter Punkt 1)
Entsprechend des Beispiels sollte dies dann im Ergebnis für die Spalte sie folgt aussehen:
R13687 238077 R90222 302248
siehe auch:
- REGEXP_SUBSTR
- REGEXP_LIKE (Werte für Parameter match_type)