Seite 1 von 1
aufsteigende Liste mit QRegExp prüfen
Verfasst: 27. Februar 2008 13:20
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
Verfasst: 27. Februar 2008 13:51
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.
Das mach ich
Verfasst: 27. Februar 2008 14:02
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
Re: Das mach ich
Verfasst: 27. Februar 2008 14:31
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.
Verfasst: 27. Februar 2008 15:52
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
Verfasst: 27. Februar 2008 16:11
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.