aufsteigende Liste mit QRegExp prüfen

Alles rund um die Programmierung mit Qt
Antworten
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

aufsteigende Liste mit QRegExp prüfen

Beitrag von dust2 »

Hallo,

als Eingabe in einer Tablewidget-Spalte sind erlaubt, beliebig viele Zahlen von 0-99, durch Komma getrennt, Ich hab es erstmal soweit hinbekomnen:

Code: Alles auswählen

 // the validator treats the regexp as 99,99,99,99
 QRegExp rx("[0-9]{1,2},{0,1}[0-9]{0,2},{0,1}[0-9]{0,2},{0,1}[0-9]{0,2}");  
 QRegExpValidator v(rx, 0);
 int pos = 0;
 if (v.validate(item(row,column)->text(), pos)== QValidator::Acceptable) return true;
Optimal wäre, wenn ich mit dem regulären Ausdruck noch prüfen könnte, ob die Werte zwischen den Kommas aufsteigend sind und die Liste soll eigentlich beliebig viele Zahlen enthalten?
Geht das und wie?

Danke Daniel
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Auch auf die Gefahr hin wieder von den RegExp-Jüngern gemuchelt zu werden - aber bei so etwas einfach aufgebauten empfiehlt sich ein einfaches QString::split() + anschliessender Weiterverarbeitung.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

Das mach ich

Beitrag von dust2 »

...dachte nur, ich kann mir das nachträgliche Umsortieren der Stringliste ersparen, wenn ich nur geordnete Listen als Eingabe zulasse.
Also doch mal die meuchelnden "Jünger" fragen

Daniel
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Das mach ich

Beitrag von macman »

dust2 hat geschrieben:...dachte nur, ich kann mir das nachträgliche Umsortieren der Stringliste ersparen, wenn ich nur geordnete Listen als Eingabe zulasse.
Warum vom User etwas verlangen, was ein Computer besser erledigen kann. Vor allem gibt dir der Validator nur zurück das die Eingabe ungültig ist, aber nicht warum. Und dann steht der User da und sucht. Ist eine Zahl zu groß oder klein? Hab ich einen Punkt statt einem Komma gemacht? Oder passt die Reihenfolge nicht.

Ich würde es wie Christian machen. Schnell und einfach.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

Beitrag von dust2 »

Code: Alles auswählen

Vor allem gibt dir der Validator nur zurück das die Eingabe ungültig ist, aber nicht warum. Und dann steht der User da und sucht. Ist eine Zahl zu groß oder klein? Hab ich einen Punkt statt einem Komma gemacht?
Genau, deswegen validiere ich die Eingabe ja, damit der User merkt das er etwas falsch eingegeben hat! Grundsätzlich hast Du ja recht, aber in diesem Fall hat das schon seine Richtigkeit.
Der User definiert in der Spalte Indexe von Unterprogrammen eines Hauptprogramms, die exclusiv bearbeitet werden sollen. Hauptprogramm kann aus x Unterprogrammen bestehen, deren Reihenfolge
fix(vom user nicht beeinflussbar) ist. Im Normalfall ist die Spalte leer, d.h. alle Unterprogramme des aktuellen Hauptprogramms werden an die CNC-Maschine geschickt. In Sonderfällen kann der User die Indexe derjenigen Programme angeben, die er nachbearbeiten will, dann werden nur diese produziert(und zwar aufsteigend) die anderen ignoriert. Da der Bediener die Unterprogrammliste eh von oben nach unten durchgeht und er die Reihenfolge sowieso nicht ändern kann, kann ich schon von ihm verlangen, die Daten geordnet einzugeben. Aber ich wollte hier keinen THREAD zu HMI-Philosphie aufmachen, sondern etwas über die Verwendung von regulären Ausdrücken dazulernen!

Daniel
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

dust2 hat geschrieben:Aber ich wollte hier keinen THREAD zu HMI-Philosphie aufmachen, sondern etwas über die Verwendung von regulären Ausdrücken dazulernen!
Erste Anlaufstelle: Regular-Expression.info
Mir fällt aber keine Möglichkeit ein, wie Du mit einer RegExp die Reihenfolge prüfen könntest.

Und was das HMI angeht, damit steht und fällt ein Programm, aber das sollte man wirklich woanders diskutieren.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten