Seite 1 von 1
Verschiedene Teilstrings finden (std::find)
Verfasst: 23. April 2009 10:44
von Exasperation
Hallo zusammen!
Ich habe ein Programm, das aus beliebig vielen cpp, hpp, txt-Dateien Strings rausfiltern kann, die mit TRANSL("das hier wird ausgeschnitten") markiert sind...
also die Eingabe ist zB
Code: Alles auswählen
bllaaaaaaaaaaaaaaaaaa blub TRANSL("das muss raus") irgendwas bla;
und man erhält in einer output.txt
So... und nun möchte ich das Programm erweitern, sodass auch Sachen gefiltert werden die durch translate("das muss raus") und qtranslate("das muss raus") markiert wurden... Um den substring zu erstellen arbeite ich mit find:
So sieht das bisher aus... Nun soll mein Programm aber auch die anderen Markierungen finden... Habt ihr ne Idee wie ich das bewerkstelligen könnte? Ich vermute ein einfaches
wird wohl nicht reichen

Verfasst: 23. April 2009 10:54
von AuE
Schau dir mal QRegExp an!
Verfasst: 23. April 2009 10:56
von franzf
Muss es denn mit std::find sein? Denn mit QString kannst du ganz einfach QRegExp verwenden.
Ansonsten entweder mehrfach find auf deinen String ansetzen, um die verschiedenen Varianten zu finden, oder halt eigenes find schreiben, und zeichenweise durch den String laufen, und selber auf alle Varianten checken.
Sicher geht es aber auch mit der boost-regexp-Klasse, das geht AFAIK aber nicht über Templates, da musst du eine Lib mit ausliefern.
Grüße
Franz
Verfasst: 23. April 2009 11:15
von Exasperation
Nee in diesem Fall verwende ich keinen QString sondern nur einen std::string... Bin jetzt auf die Lösung gekommen, dass ich einfach den zu findenen String als Paramter übergeb... Also an die Funktion die letztendlich den String zerlegt...
Code: Alles auswählen
std::getline( input, line);
parse_line( line, "TRANSL(" );
parse_line( line, "qtranslate(" );
parse_line( line, "translate(" );
Jetzt habe ich allerdings noch das Problem, dass er mir dann manche substrings zweimal ausspuckt, weil in "qtranslate" ist ja auch "translate" enthalten

Wenn ich es mir recht überlege müsste es ja reichen wenn ich nur nach TRANSL und translate suche... *denk*
Verfasst: 23. April 2009 11:20
von AuE
mach nen lower und dann isses sogar nur noch transl
was hast denn genau vor? willst den string splitten? oder was?
Verfasst: 23. April 2009 14:09
von Exasperation
Jap... das dient zu ner Übersetzung von ner sehr umfangreichen Software meiner Firma (insgesamt 2GB an Dateien) und mein Programm durchsucht jede textbasierende Datei nach diesen "markierten" Strings die der Kunde auf seienr GUI sehn wird... Fehlermeldung, Fragen, alle möglichen Angaben eben die übersetzt werden müssen... Und mit meinem Programm finde ich diese Zeilen, und zerschneide die Strings sodass er aus
Code: Alles auswählen
Bla blub irgendwas TRANSL("Couldn't find file.. blabla") irgendwas bla;
das hier rausholt:
und in eine txt Datei schreibt, weil in der dann die ganzen Übersetzungen stehen werden...

Aber habs jetzt alles hinbekommen ^^
Aber hätte noch ne andere Frage: Kommandozeilenbefehle gibt man in c++ doch so an:
oder nicht?
Weil wenn ich auf diese Art ne Datei löschen will, dann macht er das nicht... Die Datei, die zu löschen ist befindet sich im selben Verzeichnis...