hardcoding hat geschrieben:Code: Alles auswählen
int main() {
int i=1;
char zeile[250],datei[50];
[code] streampos ausgabepos1,anfangpos,endepos;
cout << "Dateiname: " << flush;
cin.get(datei,50);
ifstream eingabe(datei,ios_base::in);[/code]
Hier fragt er nach einen Dateinamen gefragt ,welches mit
ifstream geöffnet werden soll.
so interpretiere ich das bis jetzt.
So sehe ich das auch.
hardcoding hat geschrieben:
Code: Alles auswählen
if (eingabe.good()) {
ofstream ausgabe("programm.lst",
ios_base::out | ios_base::in
| ios_base::ate);
Wenn die Bedingung True ist ,kopiert er es in der Datei Programm.lst
Was kopiert er denn!? Er erzeugt doch nur die Datei "programm.lst".
hardcoding hat geschrieben:
Code: Alles auswählen
if (ausgabe.good()) {
eingabe.seekg(0L,ios::end);
ausgabe << "Datei: " << datei << "\t"
<< eingabe.tellg() << " Bytes";
ausgabepos1=ausgabe.tellp();
ausgabe << " "
<< endl;
Hier springt er am Anfang der Datei und gibt mit
den Dateinamen aus.
Die Dateizeigerposition wird ermittelt?! Wozu es wurde doch schon mittels ofstream geschrieben.
Meinst Du ausgabe1? Interessante Frage... er hat schon was geschrieben, dann merkt er sich die Position und schreibt mehrere Leerzeichen... In ausgabepos1 steht also drin, wo die Leerzeichen anfangen.
hardcoding hat geschrieben:
Code: Alles auswählen
for(int j=0; j<80;j++)
ausgabe << "_";
ausgabe << endl;
eingabe.seekg(0L,ios::beg);
anfangpos=ausgabe.tellp();
while (eingabe.good()) {
eingabe.getline(zeile,250);
ausgabe << setw(2) << i++ << ":"
<< zeile << endl;
Und hier springt er irgendwie die ganze Zeit rum. Er springt zum Anfang der Datei. Ich weiß auch nicht wozu. naja getline liest das irgendwie alles ein. keine ahnung
Zum einen macht er mal 80 '_'-Zeichen hintereinander und dann eine Newline. Also eine Zeile mit einer Text-Linie.
Dann springt er in der Eingabe an die erste Position und merkt sich bei der Ausgabe die Position in der Variablen "anfangpos".
Dann Beginn eine While-Schleife: Solange da noch eingaben kommen... Er liest eine Text-Zeile aus der Eingabedatei ein und speichert sie in der Variablen "zeile", das Char-Array am Anfang.
Anschließend schreibt er in die Ausgabedatei eine Zahl - die Zeilennummer - gefolgt von einem Doppelpunkt und anschließend die gelesene Zeile. Die geschweifte Klammer dahinter fehlt.
hardcoding hat geschrieben:
Code: Alles auswählen
endepos=ausgabe.tellp();
ausgabe.seekp(ausgabepos1,ios::beg);
ausgabe << " alt - Neu: "
<< endepos-anfangpos << " Bytes";
Dateigröße wird ermittelt.
Hier speichert er die Endposition der Ausgabedatei.
Anschließend springt er zurück an die Stelle, die er sich zuvor gemerkt hat, da wo die Leerzeichen sind und überschreibt die Leerzeichen mit endepos-anfangspos. Ich habe keine Ahnung, wieso er sich für die Größe der Geschriebenen Daten ohne die erste Zeile interessiert, aber das lese ich nunmal aus dem Quelltext. Ich vermute eher, dass hier die Größe der Eingabedatei gefragt war, aber ich weiß ja nicht, was der Autor des Quelltextes sich vorgestellt hat und Programme machen ja auch nur, was man ihnen sagt.
Wenn Du den Quelltext mit "Und hier springt er irgendwie die ganze Zeit rum." beschreibst, weil Du es nicht besser verstehst, dann sind die Blöcke zu groß. Achte darauf, was mit welcher Variablen passiert. Notfalls kommentiere Zeilenweise, so dass Du neben dem Programmtext eine Art Aufsatz bekommst, was da passiert. Dann erst fasst Du es Blockweise zusammen.