Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
RAD-Studio 2009 Pro
|
AW: String Code überprüfen
19. Jul 2012, 13:57
Mit dem regex "^O(\d+)" habe ich alle Prüfungen erschlagen und schon den reinen Ziffernstring in match[1] gespeichert, dann einfach ein strtoint(match[1]) (nicht einmal trystrtoint ist nötig, weil in match[1] steht sicher eine Ziffernfolge, wenn regexmatch erfolgreich war). Wenn man will, kann man sogar leicht die Anzahl der Ziffern auf maximal 4, 5 oder irgend etwas sinnvolles beschränken, gefolgt vom Zeilenende oder einem Zeichen, das keine Ziffer ist, um sicherzustellen, dass kein Überlauf bei der String-Konvertierung erfolgt, es könnte ja auch eine Zeile: O1234567891234567891234567891234567891234567891234 56789+- dazwischenrutschen. Der Regex schaut dann einfach so aus: "^O(\d{1,5})(\D|$)"
Wie mühsam das Ganze auf die Klassische Art ist (und in Wirklichkeit auch insofern schlecht lesbar, als nicht auf den 1. Blick sichtbar ist, was genau in Sonderfällen passiert), siehst Du schon daran, dass auch diese schon recht komplizierte Variante nicht ausreicht: Was ist, wenn weder "+" noch "-" auf die Zahl, sondern ein anderes Zeichen folgt - es geht übrigens aus der Beschreibung nicht klar hervor, ob z.B. O17abc-+ erlaubt oder verboten wäre?
Wenn nur + oder - oder das Zeilenende auf die Ziffern folgen darf, aber kein anderes Zeichen, dann ändere ich den Regex einfach auf "$O(\d{1,5})([+-]|$)". Wenn ich so eine Änderung mit klassischer Programmierung machen will, dann muss ich bei jeder Kleinigkeit am code selbst basteln und über die richtige Abfolge der Abfragen tüfteln.
Noch dazu ist die klassische Programmierung durch die schiere Codemenge fehleranfälliger, hier müsste z.B. die letzte Abfrage if pos('+',satz)>0 then
statt if pos('-',satz)>0 then
lauten, das ist sicher beim copy & paste untergegangen.
Geändert von idefix2 (19. Jul 2012 um 14:07 Uhr)
|