Tokenize oder alternative?
-
Hi, ich dachte mir es wäre gut Tokenize auf einen CString anzuwenden,
aber wie ich jetzt sehe, wird quasi jedes Zeichen als "Trenner" verwendet.CString Inhalt = "abc-test<br>Hello<br>Welt!"; resToken=inhalt.Tokenize("<br>",curPos);
Ich wollte als Ergebnis folgendes erhalten:
abc-test, Hello und Welt.Das <br> war also als Trennzeichen gedacht.
Ich sehe jetzt aber, dass mir "a", "c-test", "Hello" und Welt
zurückgegeben werden.
Er trennt also bei jedem Zeichen ("<" oder "b" oder "r" oder ">") den String ab.Kann man Tokenize hier irgendwie austricksen, oder muss ich meine Funktionen
überdenken?
-
Nimm doch einfach CString::Find...
So schwer ist es auch nicht dann eine Schleife zu bauen.Oder (wenn Du zu faul bist es selbst zu schreiben und Performance keine Rolle spielt) nimm CString:Replace... tausche <br> in \t und nimm dann Tokenize...
-
Nötigenfalls schreibst du dir einfach einen eigenen Tokenizer. Ist wirklich einfach, wenn man weiß was zu tun ist. Auf Basis von std::string oder char* geht das recht fix. Eine ordentliche ANSI-C-Implementierung dürfte sogar relativ schnell sein.
-
...
-
Eines der Nachteile von MFC, das Teil wird nicht gut weiterentwickelt. Ergebnis: man muss sich vieles selber zusammenbauen bzw. andere Bibliotheken einbinden.
Bei anderen Toolkits (Qt, wx) werden auch solche Standard-Klassen wie String immer wieder um neue Funktionen ergänzt. Die String-Klasse hat bei Qt Funktionen wie ::split und ::join, die auch so funktionieren, wie der Threadersteller das will und noch viel mehr. MS hat CString doch bestimmt 20 Jahre unverändert so belassen.Nun zum Problem
Google mal nach: cstring tokenize codeproject
Da wirst du Lösungen finden...
-
Softwaremaker schrieb:
MS hat CString doch bestimmt 20 Jahre unverändert so belassen.
Nein! CString wurde gravierend umgebaut von einer normalen Klasse auf ein Template. Ich glaube das war in VC-2005. Hier wurden auch Funktionen erweitert und viel standardisiert.
Aber seit dem ist glaube ich nichts mehr an CString passiert.
-
Hallo,
mach mal so:
#define SPLIT "<br>"; CString txt("111111<br>2222222<br>333333<br>444444"),sub; for(int i=0; AfxExtractSubString(sub,txtitem,i,SPLIT); i++) { sub.Replace(SPLIT,""); TRACE("%s\r\n",sub); }