In Datei schreiben und auslesen



  • asc schrieb:

    Die Frage ist nicht ob man es kann, sondern ob es Sinn macht.

    ich nehme an, in den meisten fällen ist es wohl egal, ob man 'iostream', fread/fwrite bzw. 'cout' oder printf nimmt.
    🙂



  • class, cout, etc ... kann man das essen ? 😕

    Sofern man ein C++-Compiler ist, schon... Das ist m.E. nach außerdem weniger kryptisch als der ursprüngliche Codeblock, da alle drei Klassen nach dem gleichen Schema aufgebaut sind und die beiden Funktionen eigentlich auch selbsterklärend sind.



  • ~fricky schrieb:

    supertux schrieb:

    c-howto.de schrieb:

    http://www.c-howto.de/tutorial-dateiverarbeitung.html

    pfui... C und C++ zu mischen ist nie gut (dasselbe gilt für den OP)

    wo mixt er, auf seine seite, c++ mit rein?

    dieses howto macht es nicht, aber der OP hat eine C++ Frage und sagt auch selber "bin neu in C++", da ist es sinnfrei ihm ein C Howto zu geben, das verleitet eben dazu, C und C++ zu mischen.



  • @moagnus

    Vielen Dank für die Mühe die du dir gemacht hast! Aber wenn ich das Script wie du es geschrieben hast meinem Lehrer abgebe wird der sich denken dass das nciht von mir ist weil ich es nicht alles erklären könnte was du geschrieben hast! Wäre es möglich (natürlich nur wenn du dir nochmal die Mühe machst (-; ) meinen Code so anzupassen das er dieses in eine Datei schreibt und wieder ausliest in einfachster Sprache? Eben mit fwrite etc.! Wäre dir zu tiefst Dankbar! Muss es nämlich am Dienstag abegeben.



  • Sorry, aber ich kapier's noch immer nicht... Willst du so 'ne Art Quine - ein Programm, dass sich selbst ausgeben kann, in deinem Fall in eine Datei schreiben kann - oder sollen einfach nur die gespeicherten Werte (Vorname, Nachname etc.) in eine Datei geschrieben/aus einer Datei gelesen werden können?



  • Hi,

    es soll einfach nur die gespeicherten Werte (Vorname, Nachname etc.) in eine Datei geschrieben/aus einer Datei gelesen werden!



  • Ich hab mir noch mal die Mühe gemacht und meinen geposteten Code dahingehend erweitert.

    Tut mir leid, wenn es nicht ganz deinen Vorstellungen entspricht, aber unter C++ gibt's die Erweiterung durch Streams (gegenüber C), die die Handhabung mit Dateien vereinfacht: Inhalt beliebiger Art kann in einen Stream geschrieben werden, der am anderen Ende mit einem selbst gewählten Ziel verbunden ist. In diesem Fall bietet es sich an, die Operatoren für die Ausgabe zu überladen, sodass Objekte der Klassen Person, Auto, Herkunft streamfähig werden.
    Ein Zweites sind Klassen. Dein erster Code war mit C-structs modelliert. Die zusammengefassten Variablen sind damit von außen zugreifbar, was dem Prinzip der Datenkapselung widerspricht. Benutze einfach das Schlüsselwort "class", um eine geschlossene Einheit aufzubauen, auf deren Elementvariablen du dann kontrollierten Zugriff über Getter- und Setter-Methoden gestattest.
    Drittens lebt - wie bereits oben angesprochen - C++ von Klassen und deren Kombination miteinander. C++ bietet bereits einige Klassen im standardisierten Sprachumfang an. Dazu gehört bspw. die Klasse "std::vector", die ein blankes Array kapselt und komfortable Funktionen darauf anbietet. Eine weitere Klasse ist "std::string" - eine Hülle um char-Arrays.

    Das alles nicht zu benutzen bedeutet, sich das Leben/Programmieren unnötig schwer zu machen und steht der Sprachphilosophie von C++ entgegen. Dein erstes Code-Beispiel war C mit ein paar C++ entlehnter Komponenten.



  • Vielen, vielen Dank. So muss mich jetzt nur mal daran machen das alles auf deutsch zu übersetzen weil ich kaum verstehe was in jeder Zeile geschieht.



  • moagnus schrieb:

    Tut mir leid, wenn es nicht ganz deinen Vorstellungen entspricht, aber unter C++ gibt's die Erweiterung durch Streams (gegenüber C), die die Handhabung mit Dateien vereinfacht: Inhalt beliebiger Art kann in einen Stream geschrieben werden, der am anderen Ende mit einem selbst gewählten Ziel verbunden ist.

    aha, du willst uns sagen, dass C keine streams kennt. Schon mal was von FILE gehört?

    Wo ist der Vorteil von

    MeineKlasse a;
    ..
    std::cout << a << std::endl;
    

    zu

    MeineKlasse a;
    ...
    MeineKlasse_print(stdout);
    

    ??? In C++ musst du den <<-Operator überladen, da geschehen auch die Sachen nicht von alleine.

    moagnus schrieb:

    Ein Zweites sind Klassen. Dein erster Code war mit C-structs modelliert. Die zusammengefassten Variablen sind damit von außen zugreifbar, was dem Prinzip der Datenkapselung widerspricht.

    quatsch! Auch das tolle 'private'-keyword von C++ lässt sich umgehen (hier im Forum gibt es sogar Beispiele dafür, ich poste keinen Link, weil ich keine Lust hab danach zu suchen). Diese C-Strukts entsprechen genau die Datenkapselung, hier bringe FILE nochmal ins Spiel, als Beispiel für Datenkapselung. Verwechsle nicht synatktischen Zucker mit Konzepten.

    moagnus schrieb:

    Drittens lebt - wie bereits oben angesprochen - C++ von Klassen und deren Kombination miteinander. C++ bietet bereits einige Klassen im standardisierten Sprachumfang an. Dazu gehört bspw. die Klasse "std::vector", die ein blankes Array kapselt und komfortable Funktionen darauf anbietet. Eine weitere Klasse ist "std::string" - eine Hülle um char-Arrays.

    das ist wahr, aber das heißt nicht, dass es sowas für C gar nicht gibt. Die glib ist z.B. eine umfangreiche Bibliothek, die auch solche Datenstrukturen anbietet. Sicher nicht mit der "Einfachkeit" (sprich syntaktischen Zucker) wie C++ Templates aber sie sind da.

    moagnus schrieb:

    Dein erstes Code-Beispiel war C mit ein paar C++ entlehnter Komponenten.

    C++ hat die Objekt orientierung nicht erfunden.



  • Schon mal was von FILE gehört?

    Rein begrifflich verbinde ich FILE immer erst einmal mit "Dateizeiger", aber du hast ja recht.

    Wo ist der Vorteil von ...

    Es ist eine syntaktisch ansprechendere Form.

    Auch das tolle 'private'-keyword von C++ lässt sich umgehen

    Du meinst "friend"?

    C-Strukts entsprechen genau die Datenkapselung

    Du redest von C-Structs, wenn es doch eigentlich um C++ geht. Auch bei C++-Structs ist der Zugriff direkt. Was ist an kontrollierenden Schnittstellen (Getter/Setter) verkehrt?

    das heißt nicht, dass es sowas für C gar nicht gibt

    Noch mal: Es geht um C++.

    C++ hat die Objekt orientierung nicht erfunden.

    Das wiederum habe ich nie auch nur ansatzweise behauptet. Aber was der TE anfangs gemacht hat, war eine konzeptionelle und syntaktische Durchmischung von C und C++ m. E.

    PS: Tut mir leid, wenn ich deinen Post falsch gelesen habe, aber geht das beim nächsten mal auch bitte ein bisschen freundlicher und mit weniger Bissigkeit?



  • moagnus schrieb:

    Wo ist der Vorteil von ...

    Es ist eine syntaktisch ansprechendere Form.

    eine subjektive Einschätzung. Mir gefällt die C Synatx deutlich besser.

    moagnus schrieb:

    Auch das tolle 'private'-keyword von C++ lässt sich umgehen

    Du meinst "friend"?

    wenn ich 'private' geschrieben hab, dann meine ich es auch so.

    moagnus schrieb:

    Du redest von C-Structs, wenn es doch eigentlich um C++ geht. Auch bei C++-Structs ist der Zugriff direkt. Was ist an kontrollierenden Schnittstellen (Getter/Setter) verkehrt?

    hä? du hast nicht verstanden, was ich sagte: Die C Structs ermöglichen Datenkapselung. Es ist auch immer besser, wenn man in C setter und getter implementiert, das macht FILE zum Beispiel auch. Du sagtest aber Dein erster Code war mit C-structs modelliert. Die zusammengefassten Variablen sind damit von außen zugreifbar, was dem Prinzip der Datenkapselung widerspricht, was nicht stimmt.

    moagnus schrieb:

    das heißt nicht, dass es sowas für C gar nicht gibt

    Noch mal: Es geht um C++.

    nein, du gibst als Argument für C++ die STL an. Ich sagte nur, dass es für C auch Bibliotheken gibt, die solche Datenstrukturen/Algorithmen wie std::vector haben.

    moagnus schrieb:

    C++ hat die Objekt orientierung nicht erfunden.

    Das wiederum habe ich nie auch nur ansatzweise behauptet.

    und wie soll ich folgendes interpretieren?: Dein erstes Code-Beispiel war C mit ein paar C++ entlehnter Komponenten. C++ hat solche "Komponenten" nicht erfunden (und so hat man auch lange vor der Erfindung von C++ gearbeitet, FILE ist ein gutes Bsp dafür).

    moagnus schrieb:

    PS: Tut mir leid, wenn ich deinen Post falsch gelesen habe, aber geht das beim nächsten mal auch bitte ein bisschen freundlicher und mit weniger Bissigkeit?

    und wo war ich unfreundlich?

    edit:
    Jetzt merke ich, dass die Diskussion ein bisschen sinnlos ist (insbesonder auf den "Streit" um die STL), weil ich vergessen habe, dass der OP seine Frage im falschen Forum gestellt hat. Da ich dieses vergessen hatte, dachte ich, du willst mit C++ helfen, obwowhl der OP C wollte.



  • Keine Ursache



  • Flamewar ahoi!
    👍


Anmelden zum Antworten