Verzweifelt: Textfile einlesen, Zeilen selektieren, ändern, ausgeben.
-
Hallo liebes Forum,
mittlerweile bin ich echt am Verzweifeln. Folgender Fall:
Grundsätzlich:
Ich habe ein Textfile generiert und möchte dieses einlesen, Werte in den Zeilen ermitteln, diese Werte kommentieren und wieder als Textfile abspeichern. Darüber hinaus generiere ich extern (nicht in c++) ein neues Textfile und möchte dessen Inhalt (Namen bleiben fix und Zahlenwerte können sich ändern) einlesen und bei Zahlenänderung eine Meldung in einem neu generierten Textfile ausgeben. Die Anordnung im Textfile liegt im Excel-Format vor, also Zeilen und Spalten ausgerichtet. Relevant sind für mich die Zeilen 3-34 und die Spalten 3/6/7/8/9/10/11/12. In der Spalte 3 stehen Namen und in den restlichen Spalten stehen Zahlen von null bis 200, welche sich ändern können. Es gibt 31 Namen und jeweils 8 Zahlenwerte in der Zeile. Die Namen sind allerdings immer an der gleichen Stelle.Ich hoffe das ist auf irgend eine Weise verständlich!
Ich dachte das Einlesen und Abspeichern löse ich mit mit ifstream fin("Datei.txt") und ofstream fout("Datei1.txt").
Das Zeilenweise auslesen mit:
while (getline(fin, zeile))
{
int position= zeile.find(' ');
if (zeile.find("Name")!=string::npos)
}Wenn ich den Namen zugeordnet habe soll der Zeileninhalt geprüft werden und genau an diesem Punkt hänge ich dann auch schon. Die Frage wie ich einen Kommentar in ein Textfile schreibe ist mir auch noch schleierhaft. Und eine Änderung zum vorherigen Textfile soll ja nun auch erkannt werden.
Ich bin über jeden Tipp glücklich!!!
Lieben Dank,
Ann
-
2 Vorgehensweise bei Einfügen
1. Datei komplett in den Speicher lesen und hier bearbeiten sprich den Datensatz einfügen. Alles zurückschreiben auf die Datei.
2. Satzweise einlesen und satzweise in eine Tmpdatei schreiben. Den einzufügenden Datensatz an der passenden Stelle in die Tmpdateischriben und schliesllich den Rest der Quelldatei in die Tmpdatei kopieren. Quelldatei löschen. Tmpdatei umbenennen.
Oder einfach anhängen, was natürlichh kein Einfügen ist.
-
Das was ich gescchrieben habe passt nicht.
Eine Zeile muss ja in einem gewissen Format aufgbaut sein. Ich les hierr nur etwas mit Excel. Heißt das CSV? Wenn nicht, musst Du erst das Excelformat aufarbeiten.
Egal erst mal No-Excelformat
Das Prinzip:
Die liest Du im Stream bis Du die entsrechende Zeile erwischt hast und hängst dann Deinen Kommentar daran. Dann schreibst Du diese Zeile zurück in die Datei.
Werteänderung in einer Datei bemerken läuft nach dem Muster Vergleich Ursprungswert mit aktuellem Wert. Also irgendwo gibts die referenzwerte (in einer Datei?) und Du gehst Deinen Datenfile anhand der Referenz durch.Zur Arbeit mit mit den Streamklassen empfehle ich Dir:
http://www.cplusplus.com/reference/iostream/
Hier steht alles was Du brauchst um mit Dateien zuarbeiten.
Wenn Du aber Excel-Sheets verarbeiten willst, was bei Deiner Formulierung etwas nebulös ist, schau hier:
http://msdn.microsoft.com/en-us/library/bb386107.aspxMöglicherweisee ist Dein Problem aber auch einfach mit Scripting in Excel lösbar.
Aber dann würdest Du nicht in einem C/C++ Forum posten
-
Hallo noergel,
vielen Dank für Deine Infos. Ich werde sie mir gleich mal zu Gemüte führen.
lg,
Ann