Datei Durchsuchen + Zeilen Löschen
#1
geschrieben 14. Februar 2007 - 08:31
ich hatte bis jetzt noch nichts mit dem Einlesen von Dateien zu tun, deswegen habe ich hier ein paar Fragen. Also ich habe eine xml-Datei und ich muss in einem bestimmten Bereich zwischen zwei Tags mehrere Zeilen löschen.
z.B. zwischen diesen Tags sind mehrere Zeilen ---> <Beispiel> </Beispiel>
<Beispiel>
Zeile1
Zeile2
Zeile3
Zeile4
</Beispiel>
So jetzt meine Fragen.
1) Wie lese ich z.B. eine xml-Datei ein. Wird die eingelesene Datei in irgendeiner Variablen gespeichert ? Wenn ja welchen Datentyp muss ich wählen ? String ?
2) Ich muss ja einmal nach diesem Tag suchen "<Beispiel>" und einmal nach diesem "</Beispiel>". Wie finde ich nun heraus wieviele Zeilen dazwischen sind bzw. wie ich die Zeile löschen kann.?
Kann mir vielleicht jemand helfen bitte.
Anzeige
#2
geschrieben 14. Februar 2007 - 08:58
#3
geschrieben 14. Februar 2007 - 09:03
danke für die schnelle Antwort.
Ich "muss" ein kleines C++ Programm schreiben.
Ich habe ein paar Probleme und zwar weiß ich halt wie gesagt nicht, wie ich in der Textdatei oder xml-Datei (das is egal) etwas bestimmtes suchen kann wie oben zu sehen ist die "Beispiel Tags" und diese mit den dazwischen befindenden Zeilen löschen kann. Sonst soll die Datei nicht weiter verändert werden.
#4
geschrieben 14. Februar 2007 - 09:16
Bei Unklarheiten ansonsten einfach nachfragen
#5
geschrieben 14. Februar 2007 - 09:27
1. Parameter = Anzahl Löschvorgänge.
2. Parameter = Startpunkt des Löschvorgangs
3. Parameter = Endpunkt des Löschvorgangs
Bin noch ein newbie im programmieren. Please, help me.
#6
geschrieben 14. Februar 2007 - 09:39
Zitat
Es ist dir verboten auf externe Bibliotheken zuzugreifen?
Ganz ehrlich...bevor ich das Rad neu erfinde, schaue ich erst nach, ob sowas ähnliches schon existiert.
Und Xerces ist in dem Sinne kein eigenes Programm, sondern eine Bibliothek, die einem auf einfachste Weise ermöglicht, XML-Dateien zu lesen/schreiben. Und den Rest musst du sowieso selbständig implementieren.
Wenn du das jetzt wirklich auf "Low-Level-Ebene" entwickeln möchtest - wovon ich dir wirklich abrate - dann sollte dir dieser Link weiterhelfen: http://www.cplusplus...rial/files.html
#7
geschrieben 15. Februar 2007 - 11:15
also noch einmal zu meinem Problem zurück. Bin ja newbie.
Also ich weiß wie ich auf Parameter zugreife, die ich beim Programmaufruf mitgebe. Das habe ich rausbekommen.
Mein Problem: ist aber immer noch in einer Datei nach etwas zu suchen (Suchbegriff steht in einer Variablen) und wenn der Suchbegriff gefunden wird bis zu einer stelle Sachen zu löschen. Diese Stelle bis wohin gelöscht werden soll steht in einer anderen Variablen.
Also ich kann eine Datei öffnen, und in der Konsole den Dateiinhalt meiner Textdatei auszugeben.
int main(int argc, char* argv[])
{
ifstream datei; // neues objekt zum auslesen meiner datei
string zeile; // ein string in den eine zeile immer geschrieben wird
datei.open("Configuration.txt", ios::in); // öffnen der datei + zuweisung in objekt
while(!datei.eof()) // bis end of file
{
getline(datei,zeile); //hol die nächste zeile
cout << zeile << endl;
}
datei.close();
getch();
return 0;
}
Dieser Beitrag wurde von alphazero bearbeitet: 15. Februar 2007 - 11:22
#8
geschrieben 15. Februar 2007 - 14:50
Zitat (Witi: 14.02.2007, 11:16)
Bei Unklarheiten ansonsten einfach nachfragen
Also ich habs jetzt irgendwie noch hinbekommen, habe aber nur Probleme saubere xml-Dateien zu erstellen.
Es scheint als speichert der Borland Builder 5 meine neue xml-datei in der codierung ANSI ab.
Wenn ich nachträglich die xml-Datei mit dem Windows-Editor öffne und sie mit der Codierung UTF-8 abspeichere, gehts wieder. Also danach kann ich meine neue xml-Datei ohne Probleme im Firefox z.b. mir angucken.
Weiß jemand eine Lösung ?
Also scheint nur die Codierung zu sein ANSI <---> UTF-8.
Oder mir helfen bei einem xml-Parser, was auch immer das sein soll. Also wie verwende ich sowas ?
Wie verwende ich es in Bezug auf den Builder 5. etc pp.
Wäre schön wenn ihr mir helfen könnt.
*Push*
Dieser Beitrag wurde von alphazero bearbeitet: 20. Februar 2007 - 13:33
#9
geschrieben 20. Februar 2007 - 13:34
Zitat (alphazero: 15.02.2007, 16:50)
Es scheint als speichert der Borland Builder 5 meine neue xml-datei in der codierung ANSI ab.
Wenn ich nachträglich die xml-Datei mit dem Windows-Editor öffne und sie mit der Codierung UTF-8 abspeichere, gehts wieder. Also danach kann ich meine neue xml-Datei ohne Probleme im Firefox z.b. mir angucken.
Weiß jemand eine Lösung ?
Also scheint nur die Codierung zu sein ANSI <---> UTF-8.
Oder mir helfen bei einem xml-Parser, was auch immer das sein soll. Also wie verwende ich sowas ?
Wie verwende ich es in Bezug auf den Builder 5. etc pp.
Wäre schön wenn ihr mir helfen könnt.
*Push*
#10
geschrieben 20. Februar 2007 - 14:28
Zitat
Dann musst du ihm sagen, dass er das in utf-8 abspeichern soll.
Zitat
wikipedia sagte:
Normalerweise haben Parser Methoden die sich bspw "setEncoding" schimpfen, mit dem du das CharSet angeben kannst.
#11
geschrieben 21. Februar 2007 - 12:33
Zitat (Witi: 20.02.2007, 16:28)
Wenn ich wüsste wie. Habe dazu nichts gefunden.
Zitat
Wenn ich eine deutsche Dokumentation zu TinyXML finden würde, würd mir das vielleicht schon weiter helfen.
Ich bin totaler Programmierneuling. Absolut neu!! Alles was mit OOP zu tun hat kann ich nicht. Zeiger Objekte etc pp.
Ein Objekt anlegen kann ich schon, nur weiß ich dann z.b. nicht auf welche methoden ich zurückgreifen kann.
also:
ifstream data("test.xml"); <--- woher weiß ich nun welche methoden ich zur verfügung habe. z.b. in einer datei nach textbausteinen zu suchen
Mein Problem ist nun da ich auch Probleme in englisch habe, durch die Doku von TinyXML zu steigen. Wie öffne ich eine xml datei mit tinyxml. wie lege ich ein objekt an (klasse ?) welche methoden stehen mir in bezug auf "Suchen, Löschen, Schreiben, Neue Datei anlegen"
Also ich brauch Hilfe auf "Erste Klasse Niveau in C++".
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
#include <iostream.h>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream datei;
ofstream neuedatei;
string zeile;
datei.open(argv[1], ios::in);
neuedatei.open("temp.txt", ios::out);
bool gefunden = false;
while(!datei.eof())
{
getline(datei,zeile);
if(zeile.find(argv[2]) != string::npos)
gefunden = true;
if(!gefunden)
neuedatei << zeile << endl;
if(zeile.find(argv[3]) != string::npos)
gefunden = false;
}
datei.close();
neuedatei.close();
remove(argv[1]);
rename("temp.txt", argv[1]);
return 0;
}
//---------------------------------------------------------------------------
Sowas, ich sag mal einfache für euch, habe ich nur durch hilfe in foren zusammenbekommen.
Der Code funktioniert, aber nur mit Textdateien!
#12
geschrieben 21. Februar 2007 - 12:44
Zitat
Programmierer treffen in ihrem Leben immer wieder auf neue Bibliotheken mit neuen Klassen und Methoden. Was bedeuten soll, dass er nicht wissen kann welche Methoden eine Klasse besitzen kann.
Aber ein guter Programmierer weiß sich zu helfen. Zwei Möglichkeiten fallen mir spontan ein.
1. Du nutzt eine IDE, die dir den Code vervollständigt.
2. Du nutzt eine API (Programmierschnittstelle, Dokumentation...nenn es du wie willst).
Wenn ich richtig sehe, nutzt du einen einfachen Editor und kompilierst wahrscheinlich auf der Konsole. (Was IMO löblich ist, da ich bspw auch so angefangen habe bzw. es mir so beigebracht wurde), also wäre der zweite Punkt für dich interessant.
Ich habe letztens noch einen interessanten Satz gelesen.
"Ein guter Programmierer kann so gut wie jede Programmiersprache, wenn ihm die Sprachreferenz und das Internet zur Verfügung steht."
In diesem Sinne...
http://www.cplusplus...stream/ifstream
Zitat
Ganz ehrlich...LERNE ENGLISCH!
Ohne englisch wirst du irgendwann einfach nicht weiterkommen...
Ansonsten bin ich mir ziemlich sicher, dass du auch deutsche Doku in einer Suchmaschine deiner Wahl finden wirst.

Hilfe
Neues Thema
Antworten
Nach oben



