Dateibearbeitung
-
Hallo,
ich soll für einen Fernkurs ein Programm schreiben, dass folgende Daten erzeugt und in einer Datei abspeichert:
123456789012345678901234567890123456789012345678901234567890 1
123456789012345678901234567890123456789012345678901234567890 2
123456789012345678901234567890123456789012345678901234567890 3
123456789012345678901234567890123456789012345678901234567890 4
123456789012345678901234567890123456789012345678901234567890 5Anschließend soll die Datei ohne vorheriges close() zeichenweise eingelese werden und ohne Zwischenspeichern auf den Monitor ausgegeben werden. Dann soll ab der n-ten Zeichenposition m Zeichen mit * überschrieben werden. Sowohl m als auch n sollen der Benutzer eingeben. Das Ergebnis der Änderung soll wieder auf dem Monitor erscheinen.
Ich habe leider absolut keine Ahnung wie ich dies lösen soll
. Kann mir da jemand bitte weiterhelfen?Vielen Dank im voraus!
-
Was genau ist Dein Problem?
Schleifen? In Datei schreiben/aus Datei lesen? Ersetzen von Zeichen?
-
Die Schleife könnte ich, aber das speichern und auslesen ohne close() und ohne zwischenspeichern nicht und das Ersetzen von Zeichen ab der n-ten Position und die Änderung wieder auf dem Bildschirm auseben leider auch nicht. Beide Themen werden nur kurz am Rande besprochen bei diesem Fernkurs.
-
Probier's mal mit seekp.
-
Du kannst ne Datei für beide Richtungen, Lesen und Schreiben, öffnen.
Mit fstream.
-
Also erstmal kannst du die Datei für beide Richtungen öffnen, bzw. erstellen.
Dann schreibst du deine Zahlen rein.
Dann kannst du den Dateizeiger an den Anfang mit seekp setzen und den Inhalt ausgeben, usw.
-
Danke..soweit bin ich bisher dann
#include<iostream> #include<fstream> #include<string> using namespace std; char puffer[63]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,'\x20','\x20',1}; int main(){ fstream schreiben; schreiben.open("chwrite.asc", ios::out | ios::in); for(int k=0;k<63;++k) { schreiben<<puffer[k]; } schreiben.seekp(0); return 0; }Wie kann ich jetzt den Inhalt von schreiben ausgeben? Ist das von oben richtig?
-
also hab die daten mal selber geschrieben...realisierung der schleife ist vorerst nicht so wichtig
-
Also bei meinem Code von oben tut sich bei mir gar nichts...der compiler ist zufrieden, aber wenn ich die datei ausführen lasse, dann zeigt er nichts an und meine datei wurde auch nicht angelegt??
Wie kann ich die Daten von schreiben ohne zwischenspeichern auf de Bildschirm ausgeben?
Vielen Dank für die Hilfe!
-
Für das Anlegen einer in/out Datei muss zusätzlich noch ios::trunc benutzt werden:
schreiben.open("chwrite.asc", ios::out | ios::in | ios::trunc);Falls die Datei schon existiert, wird sie dann allerdings (wegen truncate) leer gemacht.
Überdenke auch nochmal dein char array.
Tipp: 1 + '1' ergibt 50.
Bedenke in dem Zusammenhang auch, dass man char arrays direkt mit string-literalen initialisieren kann. Erwähne außerdem die Benutzung von std::string.
-
Sorry, ich meinte natürlich nicht
seek0r schrieb:
Erwähne außerdem die Benutzung von std::string.
, sondern:
Erwäge außerdem die Benutzung von std::string.
Deutsch ist auch keine leichte Sprache
Den Lesezeiger setzt man übrigens mit seekg. (g wegen get)
-
Vor allem brauchst du das Array gar nicht...
Denn dass sind 6 mal die Zahlen von 1,2,3,...,0 => Schleife + modulo Operator würde auch gehen. und die Zeilennummer machst du auch mit ner Schleife
for(int l = 1; l <= 5; l++) { for(int i = 1; i <= 60; i++) schreiben << i % 10; schreiben << " " << l << endl; }
-
Vielen Dank mal bisher..das Programm funktioniert bis zu dem Teil an dem ich überschreiben soll einwandfrei, aber mein Programm überschreibt die Datei nicht richtig bzw. fängt auch nicht beim richtigen Zeichen an. Warum? Kann mir jemand helfen??
cout << "\nAb dem wievielten Zeichen soll etwas veraendert werden : "; int n; cin >> n; cout << "\nWieviele Zeichen sollen veraendert werden : "; int m; cin >> m; cout<<"\n"; schreiben.seekg(n); for(int k=0;k<m;k++) { schreiben<<'*'; }Das ist der Teil wie ich ihn geschrieben habe, aber leider funktioniert er nicht...
-
Du benutzt seekg (= seek GET)
du solltest aber seekp (= seek PUT) benutzen
emm kann es sein, das ihr das macht, wass in dem Buch Grundkurs-Software entwicklung mit C++ von Dietrich May steht?
lg
BlackMaster_