Platzhalter für AnsiStrings
-
Hallo,
ist mir ja jetzt schon fast peinlich, ich habe jedoch schon wieder eine Frage
:
Ich suche Platzhalter für AnsiString-Zeichen. Nehmen wir mal an in einem vom Benutzer eingegebenen Text (AnsiString) möchte ich nach Zeichenfolgen suchen - IP-Adresse ist n Gutes Beispiel: XXX.XXX.XXX.XXX wird eingegeben, irgendwo in einem kuzen Text. Nun möchte ich mit AnsiString.Pos danach suchen:
int P= Edit1->Text.Pos (***"."***"."***"."***);
So in der Art hatte ich mir das vorgestellt... die * stehen für die Platzhalter. Ich habe aber mal wieder weder in Hilfe noch in FAQ noch in Suche etwas gefunden, was mir weitergeholfen hat - deshalb: Wenn Ihr etwas zu Platzhalter und AnsiStrings wisst, bitte frei raus damit!
MfG
-
Hallo
Dafür wären Reguläre Ausdrücke am besten. Aber sowas hat der Builder als Laufzeit-Operationen nicht (nicht in den Versionen mit denen ich gearbeitet hat).
Entweder holst du dir eine externe Library die RegEx unterstützt oder du verwendest die Pos-methode um selber zu überprüfen ob die Funstellen wirklich IP-Adressen sind.
bis bald
akari
-
Danke für die schnelle Antwort, dann brauch ich erstmal nicht mehr nach Platzhaltern suchen. Was ist denn "RegEx"???
MfG
-
Hallo
RegEx = Regular Expressions = Reguläre Ausdrücke. Weiteres findest du über Google und Forms-SuFu.
bis bald
akari
-
Ich wüsste nicht das Pos Platzhalter kennt aber warum nicht selbst was basteln was dir nachguckt ob die Punkte in gewünschter Reihenfolge auftauchen?
int FindIP(AnsiString str) { int pos=1; while(true) { pos=str.SubString(pos,str.Length()-pos+1).Pos("."); if(pos==0) return 0; if((str[pos]==str[pos+4]) && (str[pos]==str[pos+8])) return pos; } }
Wie man die Zeichen zwischen den Punkten auf Zahlen abprüft überlasse ich deiner Fantasie
[EDIT]
Ich seh grad dass du nach Platzhaltern im Allgemeinen gefragt hast. Das ist die Lösung von akira natürlich besser.
-
Ich habe es zwar selber noch nicht benutzt, aber da gibt es doch 'TMask' (#include "masks.hpp"). Könnte das dein Problem lösen ?
-
Hallo
Jain. Es hilft grob Eingaben zu filtern. Aber erstens nur Eingaben, nicht nachträgliche Stringbearbeiten. Und zweitens hat es auch nicht die nötige Präzision. So ist zum Beispiel 300.300.300.300 keine gültige IP, aber läßt sich mit TMaskEdit nicht von gültigen IPs unterscheiden.
bis bald
akari
-
Hallo,
erstmal nochmal Danke an alle, die sich mit dem Problem auseinandergesetzt (ganz schön lang, wird das wirklich zusammen geschrieben? - gibts hier im Forum n RechtschreibGuru *Ausruf*?) haben.
Ich mache die Prüfung auf Vorhandensein und Gültigkeit dann gegebenenfalls also "zu Fuss". TMask werde ich mir in diesem Zshg. trotzdem mal anschauen.
Nochmal zum Thema RegEx zurück: Macht es für erfolgreiches Programmieren grundsätzlich Sinn sich damit zu beschäftigen, oder braucht man das nur in Sonderfällen? (Ich weiß, "kein Sonderfall" ist die Ausnahme, richtig?)MfG
Edit: die Änderungen hab ich unterstrichen!
-
Hallo
Für mittelkomplexe Parsing-Aufgaben ist RegEx genau richtig. Einfache Sachen sind mit den AnsiString-Methoden besser zu lösen, für komplexe Sachen ist ein dedizierter Parser notwendig.
Ob RegEx für dich sinnvoll ist ist von deinen Anforderungen und Wissen abhängig. Nur um jetzt einmalig die IP-Adresse zu validieren ist es sicher zu aufwendig. Aber wenn auch nur die Möglichkeit besteht das du in näher Zukunft noch einmal einen String nach einen festen Muster auseinandernehmen must lohnt es sich schon so eine externe Lib zu suchen und RegEx-Syntax zu lernen. RegEx sind jedenfalls sehr verbreitet, moderne Sprachen haben oft schon eine eingebaute RegEx-Unterstützung.bis bald
akari