Eine Zeichenkette in einem fstream suchen
-
Hallo,
Ich suche nach Informationen wie ich in einer Datei die ich als fstream öffne eine Zeichenkette suchen kann.Es geht um eine MP3 Datei bei der ich nach der Zeichenkette LYIRICBEGIN suchen will.
Kann mir jemand helfen wie ich so was schultern kann mit dem CBuilder6
Vielen Dank für eure Hilfsbereitschaft
Waldsee
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Die Borland-Version ist sicherlich, die Datei in eine unsichtbare Textbox zu laden und die eingebaute Suchfunktion zu benutzen.
Maximale Geschwindigkeit geht mit filemapping und abgewandeltem Boyer-Moore.
Wenn Dir das alles nichts sagt, lies per ifstream und dessen read die gesamte Datei zeichenweise und immer bei 'L' geh in die Schleife, die versucht, auch noch "YIRICBEGIN" zu lesen. Anfangs ist es durchaus erlaubt, auch mal ein goto zu verwenden, machs nur am Ende wieder weg.
-
volkard schrieb:
Die Borland-Version ist sicherlich, die Datei in eine unsichtbare Textbox zu laden und die eingebaute Suchfunktion zu benutzen.

-
Meine persönliche Idee wär es die datei in ne ifstream zu lesen und diese dann in nem string zu speichern. Dieser wiederum bietet die möglichkeit per str.find(<arg>) buchstaben/Strings zu suchen.
Allerdings habe ich keine Erfahrung mit mp3 Dateien habe bis jetzt nur mit .txt gearbeitet und da hat dieses Schemata super funktioniert.
-
Jud4s schrieb:
Meine persönliche Idee wär es die datei in ne ifstream zu lesen und diese dann in nem string zu speichern. Dieser wiederum bietet die möglichkeit per str.find(<arg>) buchstaben/Strings zu suchen.
Allerdings habe ich keine Erfahrung mit mp3 Dateien habe bis jetzt nur mit .txt gearbeitet und da hat dieses Schemata super funktioniert.
mp3 Dateien sind Binaerdateien und müssen mit ios::binary geöffnet werden. Wenn man die Datei in einen Puffer
einliest, kann man die Position des Suchstrings mit memcmp() sehr schnell finden.
z.B:#include <fstream> #include <iostream> using namespace std; int main() { const char suchstring[] = "LYIRICBEGIN"; ifstream in("song.mp3", ios::binary | ios::ate); int len = in.tellg(); char* buf = new (nothrow) char [len]; if (!buf) cout << "Failed!\n"; else { in.seekg(ios::beg, 0); in.read(buf, len); for (size_t i = 0; len-(sizeof suchstring-1) ; i++, len--) { if (!memcmp(buf + i, suchstring, sizeof suchstring - 1)) cout << suchstring << " gefunden an Position " << i << endl; } delete[] buf; } in.close(); return 0; }mfg
-
otto8 schrieb:
#include <fstream> #include <iostream> using namespace std; int main() { const char suchstring[] = "LYIRICBEGIN"; ifstream in("song.mp3", ios::binary | ios::ate); int len = in.tellg(); char* buf = new (nothrow) char [len]; if (!buf) cout << "Failed!\n"; else { in.seekg(ios::beg, 0); in.read(buf, len); for (size_t i = 0; len-(sizeof suchstring-1) ; i++, len--) { if (!memcmp(buf + i, suchstring, sizeof suchstring - 1)) cout << suchstring << " gefunden an Position " << i << endl; } delete[] buf; } in.close(); return 0; }Das sieht irgendwie nach C/C++ aus
