Verschiedene Teilstrings finden (std::find)

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Verschiedene Teilstrings finden (std::find)

Beitrag 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

Code: Alles auswählen

"das muss raus"
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:

Code: Alles auswählen

indicator = p_line.find( "TRANSL(" );
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

Code: Alles auswählen

p_line.find( "TRANSL(" || "translate(" )
wird wohl nicht reichen :(
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Schau dir mal QRegExp an!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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 :D Wenn ich es mir recht überlege müsste es ja reichen wenn ich nur nach TRANSL und translate suche... *denk*
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

mach nen lower und dann isses sogar nur noch transl :D

was hast denn genau vor? willst den string splitten? oder was?
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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:

Code: Alles auswählen

"Couldn't find file.. blabla"
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:

Code: Alles auswählen

system("del irgendwas.txt");
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...
Antworten