Probleme beim bearbeiten einer datei.
-
Ich arbeite zurzeit an nem klein hilfttool welches mir die konfiguration von nem Emulator erleichtern soll.
nun habe ich schon 75% des program fertig und hänge an der letzetn aufgabe.
Diese besteht darin eine Datei namens World.config zu bearbeiten.aufbau dieser datei seht ihr hier
<?xml version="1.0"?>
<WorldConfig>
<world>
<id>1</id>
<name>Saga1</name>
<dbhost>127.0.0.1</dbhost>
<dbport>8001</dbport>
<dbuser>saga</dbuser>
<dbpass>saga</dbpass>
</world>
<world>
<id>2</id>
<name>Saga2</name>
<dbhost>127.0.0.1</dbhost>
<dbport>8002</dbport>
<dbuser>saga</dbuser>
<dbpass>saga</dbpass>
</world>
</WorldConfig>nun bin ich leider bissel aufgeschmissen mit dem wissen was ich atm nur zur verfügung habe in sachen C++ um das zu realisieren.
ich hatte es so geplant das man zwischen 2 funktionen auswählen kann.
einen bestimmten <world>--</world> block löschen, oder einen hinzufügen.das hinzufügen wäre indemsinne kein problem wenn ich wüsste wie man zeilen wegschneiden kann, dann würde ich es so realiseren das er überprüft ob schon ein paar tags eingetragen sind, geht zum ende, schneidet den close für <WorldConfig> weg, hängt den neuen block an und schliesst ihn wieder.
hab versucht mich über ios::trunc schlau zu machen da irgendwie nüscht gefunden...
das löschen einer id_tag wäre indem sinne dann das gleiche blos das ich nicht eine zeile sondern den gesamten blog von <world> bis </world> löschen würde.
hatte auch dran gedacht die id_tags per berechnung vergeben zu lassenaber das ist mir noch bissle zu komliziert
ich machs erstmal manuel^^ später vielelicht per berechnung.da ich mit C++ erst seit ~5Tagen arbeite ist die basis relativ billig gehalten. ich kann mir gut vorstellen das man es einfacher realisieren kann. aber ich bin wie gesagt nen laie auf der c++ basis. also bitte nicht meckern q.q
#include <fstream.h> //XMl Header für die config Datein char xml_header[] = "<?xml version=\"1.0\"?>"; //XML datein für alle configs char dbhost_in[] = "<dbhost>"; char dbhost_out[] = "</dbhost>"; char dbport_in[] = "<dbport>"; char dbport_out[] = "</dbport>"; char dbuser_in[] = "<dbuser>"; char dbuser_out[] = "</dbuser>"; char dbpass_in[] = "<dbpass>"; char dbpass_out[] = "</dbpass>"; //String für alle configs char db_host[100]; char db_port[100]; char db_user[100]; char db_pass[100]; //XML datein für die world.config char world_nameconfig_in[] = "<WorldConfig>"; char world_nameconfig_out[] = "</WorldConfig>"; char world_world_in[] = "<world>"; char world_world_out[] = "</world>"; char world_port_in[] = "<port>"; char world_port_out[] = "</port>"; char world_id_in[] = "<id>"; char world_id_out[] = "</id>"; char world_file[] = "world.config"; char world_name_in[] = "<name>"; char world_name_out[] = "</name>"; //Strings für die World config char world_name[100]; int world_idtag; int main() { ifstream fin(world_file,ios::nocreate,ios::trunc); if (!fin) // existiert bereits? { ofstream fout (world_file); fout << xml_header << "\n\n"; fout << world_nameconfig_in << endl; fout.close(); } if (fin) { } fin.close(); ofstream fout (world_file,ios::app); if (!fout) { cout << "cant open the file" << endl; return(1); } cout << "World Configuration" << endl; cout << "------------------------------" << endl; cout << "ID: "; cin >> world_idtag; cout << "Name: "; cin >> world_name; cout << "DbHost: "; cin >> db_host; cout << "DbPort: "; cin >> db_port; cout << "DbUser: "; cin >> db_user; cout << "DbPass: "; cin >> db_pass; cout << "------------------------------" << endl; cout << "Infos who gets written in the file: " << endl; cout << "ID: " << world_id_in << world_idtag << world_id_out << endl; cout << "Name: " << world_name_in << world_name << world_name_out << endl; cout << "Dbhost: " << dbhost_in << db_host << dbhost_out << endl; cout << "DbPort:" << dbport_in << db_port << dbport_out << endl; cout << "DbUser: " << dbuser_in << db_user << dbuser_out << endl; cout << "DbPass: " << dbpass_in << db_pass << dbpass_out << endl; cout << "------------------------------" << endl; fout << world_world_in << "\n"; fout << world_id_in << world_idtag << world_id_out << "\n"; fout << world_name_in << world_name << world_name_out << "\n"; fout << dbhost_in << db_host << dbhost_out << "\n"; fout << dbport_in << db_port << dbport_out << "\n"; fout << dbuser_in << db_user << dbuser_out << "\n"; fout << dbpass_in << db_pass << dbpass_out << "\n"; fout << world_world_out << endl;; fout << world_nameconfig_out << "\n"; fout.close(); return 0; }das programm zum jetztigen zeitpunkt, erstellt die datei, und schreib zwar die blöcke hinten ran, aber das </WorldConfig> steht dann hinter jedem block, und das ist falsch

hoffe jemand kann mir helfen...

wer der meinug ist er kann mir helfen, meldet euch bei mir, ich denke aktiv im icq oder msn ist sowas leichter zu erklären. vielleicht sogar im ts.MfG
Marco
-
Da gibts einiges, zum einen kannst du statt den CStrings über Char die richtigen strings über string nehmen. Desweiteren kannst du mit getline(ifstream,string) ganze Zeilen einlesen bei ifstream kommt dann deine Dateivariable rein und bei string der string danach kannst du dann über string operationen den rest abziehen und dann passt das.
-
danke für die antwort aber ich hab keine ahnung wovon du sprichst O.o
bist du dir sicher das du die fragestellung richtig gelesen hast?
weil meine frage war ja wie ich teile aus der datei rausschneiden kann um nen neuen block rein zu editieren. O.o
und itte dran denken q.q ich bin kompletter laie auf C++ basis. dein text ist verdammt verwirrent
ich raf da um genau zu sein nur die wörter aber was du mir damit sagen willst nicht 