Eine Zeile in einer datei ueberschreiben.
-
Hallo ich bin nicht gerade der beste mit C++ und ich hoffe das mir jemand helfen kann.
ich habe in einer txt datei eine folgende zeile
$IP1=255.255.255.255
ich moechte nun diese IP addresse ueberschreiben z.b. mit 10.129.73.85
das problem ist das hinter der IP addresse kein leerzeichen sein darf.
Ich habe es zwar geschaft die IP addresse zu ueberschreiben aber ich habe leerzeichen hinter der letzten zahl.
kann mir jemand helfen??
-
Hallo,
wie gehst du denn bis jetzt vor? Koenntest du etwas Code posten?
mfg
v R
-
ok hier ist der cod. etwas durcheinander aber ich hoffe das ihr damit zurecht kommt.
void tf::ChangeIPVariables (char* ip, char* script) { char ip1 [] = "xxx.xxx.xxx.xxx"; char ip2 [] = "xxx.xxx.xxx.xxx"; char ip3 [] = "xxx.xxx.xxx.xxx"; char ip4 [] = "xxx.xxx.xxx.xxx"; char new_ip[70]; strcpy(new_ip,ip); char* pchx; int counter = 1; int j; pchx = strtok ( new_ip, " ;"); while ( pchx != NULL ) { switch ( counter ) { case 1: for (j=0; j < 16; j++) ip1[j] = ' '; strcpy ( ip1 , pchx ); ip1[strlen(pchx)] = '\0'; break; case 2: for (j=0; j < 16; j++) ip2[j] = ' '; strcpy ( ip2 , pchx ); ip2[strlen(pchx)] = '\0'; break; case 3: for (j=0; j < 16; j++) ip3[j] = ' '; strcpy ( ip3 , pchx ); ip3[strlen(pchx)] = '\0'; break; case 4: for (j=0; j < 16; j++) ip4[j] = ' '; strcpy ( ip4 , pchx ); ip4[strlen(pchx)] = '\0'; break; default: break; } counter++; pchx = strtok ( NULL, ";"); } //read file int length = 0; ifstream is; is.open (script, ios::binary ); // get length of file: is.seekg (0, ios::end); if(!(length = is.tellg())) { cout << "Invalid script filename: " << script << endl; assert(0); } is.seekg (0, ios::beg); // allocate memory: char* buffer = new char[length + 1]; // read data as a block: is.read (buffer,length); is.close(); buffer[length]='\0'; fstream filestr;//, copyfilestr; filestr.open(script, fstream::in | fstream::out); for ( int t=0; t <= length; t++) { if ( buffer[t] == '$' && ( buffer[t+1] == 'I' && buffer[t+2] == 'P' && (buffer[t+3] == '1' || buffer[t+3] == '2' || buffer[t+3] == '3' || buffer[t+3] == '4') && buffer[t+4] == '=' )) { filestr.seekg (t+5); switch (buffer[t+3]) { case '1': if(strcmp(ip1,"xxx.xxx.xxx.xxx")) { filestr.write(ip1,strlen(ip1)); if(strlen(ip1)<15) { for ( j = strlen(ip1); j < 15; j++) { filestr.put(' '); } } } break; case '2': if(strcmp(ip2,"xxx.xxx.xxx.xxx")) { filestr.write(ip2,strlen(ip2)); if(strlen(ip2)<15) { for ( j = strlen(ip2); j < 15; j++) { filestr.put(' '); } } } break; case '3': if(strcmp(ip3,"xxx.xxx.xxx.xxx")) { filestr.write(ip3,strlen(ip3)); if(strlen(ip3)<15) { for ( j = strlen(ip3); j < 15; j++) { filestr.put(' '); } } } break; case '4': if(strcmp(ip4,"xxx.xxx.xxx.xxx")) { filestr.write(ip4,strlen(ip4)); if(strlen(ip4)<15) { for ( j = strlen(ip4); j < 15; j++) { filestr.put(' '); } } } break; default: break; } } } filestr.close(); if(buffer) delete [] buffer; }
wie gesagt ich bin nicht gerade gut mit c++
-
Wenn deine Zeile genauso aussieht, wie du es beschrieben hast, dann koenntest du
z. B. so vorgehen:std::string currentLine; std::fstream file(...); while(std::getline(file, currentLine)) { //tue irgendwas if(in_zeile_deiner_wahl_angekommen) currentLine.replace(currentLine.find("=")+1, std::string::npos, ip); }
mfg
v R
-
was wuerde anstelle von currentLine in der ersten zeile kommen?
-
Ups, sehe grad das ich gar nicht kommentiert hab.
Der Code macht folgendes:
* mit Hilfe von while und getline lese ich Zeile fuer Zeile aus der Datei
* in currentLine befindet sich jeweils die aktuell gelesene Zeile
* du pruefst irgendwie, ob du in der richtigen Zeile angelangt bist
* bist du in der richtigen Zeile angelangt, dann passiert folgendes:
* replace nimmt zwei iteratoren entgegen. Der Erste ist das erste Zeichen
hinter dem '=' und mit string::npos sagen wir ihm, dass die letzte
Position das Stringende ist.
* mit diesen Angaben werden dann die Zeichen zwischen iterator_pos1 und
iterator_pos2 (die ersten beiden Argumente) mit dem String 'ip'
ueberschrieben.mfg
v R
-
Ich bekomme diese beiden Fehlermeldungen
L:\grls001\fact\sg_ftctrl\tf.cpp(146) : error C2039: 'getline' : is not a member of 'std'
L:\grls001\fact\sg_ftctrl\tf.cpp(146) : error C2065: 'getline' : undeclared identifierich habe folgende includes
#include <fstream> #include <iostream> #include <stdlib.h> #include <string.h> #include <time.h> #include <assert.h> #include <fttypes.h>
irgend eine idee warum?
-
Das ist strange, getline wird mit iostream eingefuehrt.
mfg
v R