String in einer binären Datei ersetzen
-
Hallo,
ich bin leider noch ein absoluter Anfänger im Umgang mit c++,
der Umstieg von Delphi ist schwieriger als erwartet.Ich hoffe Ihr könnt mir ein wenig helfen.
Ich möchte nämlich einen String in einer "binären" Datei suchen,
diesen durch einen anderen ersetzen und das Ganze in einer
neuen Datei speichern. Nach stundenlangem Suchen bin ich leider
kein Stück weiter gekommen
MfG
-
Etwa so
#include <fstream> #include <sstream> // stringstream #include <string> const char suchString[] = { 3, 4 }; // irgendwas .. const char replaceString[] = { 'x', 2, '.', 0, '#' }; int main() { using namespace std; stringstream buf; buf << ifstream( "input.bin", ios_base::binary ).rdbuf(); std::string s = buf.str(); // Datei ist jetzt in 's' string::size_type pos = s.find( suchString, 0, sizeof( suchString ) ); // suche 'suchString' if( pos != string::npos ) { // ersetze die gefundene Stelle mit 'replaceString' s.replace( pos, sizeof(suchString), replaceString, sizeof(replaceString) ); } // wieder abspeichern ofstream( "output.bin", ios_base::binary).write( s.data(), s.size() ); return 0; }Gruß
Werner
-
hallo

danke für deine schnelle hilfe,
aber wird ber der variante nicht nur
ein einzelndes zeichen ersetzt?ich wollte eigentlich eine komplexe
stringkette suchen und ersetzen
-
endeffects schrieb:
aber wird bei der variante nicht nur
ein einzelndes zeichen ersetzt?ich wollte eigentlich eine komplexe
stringkette suchen und ersetzen
Nö; es wird eine beliebig lange Folge von Zeichen - im Beispiel 'suchString' (2 Zeichen) - durch eine andere beliebig lange Folge von Zeichen - im Beispiel 'replaceString' (5 Zeichen) - ersetzt.
Schau Dir mal in Deiner Hilfe die Methoden find und replace von std::basic_sting an.
In welcher Form liegen Dir den die 'Stringketten' vor?
-
hallo :),
oh ich danke dir - es funktioniert doch *g,
war vielleicht schon ein wenig zu spät gestern.aber vielleicht noch eine kleinigkeit,
ich versuch grad einen string an das char-array zu übergeben,
bisher leider ohne großen erfolg, kannst du vielleicht
noch mal drauf schauen was ich falsch mache?int _tmain(int argc, _TCHAR* argv[]) { using namespace std; string Query = "hallo"; char suchString[Query.size()];// irgendwas .. char replaceString[] = { 'a', 2, 'b', 0, 'c', 'd', 'e' }; for(int i = 0; i < Query.size(); i++) suchString[i] = Query[i]; ....