1+2=3



  • @Stefan: DrGreenthumb's lösung ist kürzer, einfacher, übersichtlicher und einfach C++-typischer.



  • c++ typischer glaube ich weniger und für einen Anfänger auch nicht übersichtlicher.



  • Original erstellt von <Stefan>:
    c++ typischer glaube ich weniger und für einen Anfänger auch nicht übersichtlicher.

    Aber garantiert doch - siehe hier: Ströme und Dateien in C++



  • deine lösung ist für c++ anfänger sicher unübersichtlicher 😉
    außerdem heißt's int main, nicht void, weder in C noch in C++
    und C++ typischer, weil C++ aussagekräftiger (IMO) und objektorientiert ist.
    Troll 🙂



  • Original erstellt von davie:
    weil C++ aussagekräftiger (IMO) und objektorientiert

    Naja, objektorientiert ist FILE auch, aber die fstreams sind wirklich extrem einfach zu benutzen, also warum mit der Kirche ums Kreuz wenns auch viel bequemer geht?



  • Die Funktionsweise ist wesentlich übersichtlicher, da es wenn man es
    "zu Fuss" macht wesentlich einfacher zu verstehen ist.

    ifstream in1(..), in2(..);
    ofstream(..) << in1.rdbuf() << in2.rdbuf();
    

    ist natürlich kürzer und besser, man kann so jedoch nicht nachvollziehen was eigentlich im Hintergrund passiert.



  • FILE ist nicht objektorientiert. Auch wenn die Position hier schon vertreten wurde: FILE ist vielleicht ein abstrakter Datentyp, aber mehr nicht. Wo ist die Polymorphie? Kann ich mit fprintf in einen String schreiben? Nein, ich muß sprintf benutzen. Bei den iostreams übergebe ich einen stringstream anstelle eines fstreams, und fertig.

    [ Dieser Beitrag wurde am 28.05.2003 um 23:26 Uhr von Bashar editiert. ]



  • Original erstellt von davie:
    **außerdem heißt's int main, nicht void, weder in C noch in C++
    **

    Wenn du glaubst das hilft einem Anfänger oder würde ihn überhaupt interessieren, dann tust du mir Leid....



  • Viele wege führen nach Rom...
    Zuerst sollte man die längeren Wege gehen, um den Ablauf, der dahinter steckt nachzuvollziehen.
    Daher ist es glaube ich speziell hierfür besser zu sagen:
    1.Lese Datei1 in string.
    2.hänge Datei2 an den string hinten dran.
    3.speichere den string in Datei3.
    1+2=3
    PS:
    FILE ist nicht objektorientiert.



  • Original erstellt von Bashar:
    FILE ist nicht objektorientiert. Auch wenn die Position hier schon vertreten wurde: FILE ist vielleicht ein abstrakter Datentyp, aber mehr nicht. Wo ist die Polymorphie? Kann ich mit fprintf in einen String schreiben? Nein, ich muß sprintf benutzen. Bei den iostreams übergebe ich einen stringstream anstelle eines fstreams, und fertig.

    Naja, so "objekt"orientiert wie ein Datentyp in C halt sein konnte, wie sollte fprintf() denn sinnvollerweise in einen String schreiben können wenn Funktionen nicht überladen werden können?



  • Original erstellt von <amateur>:
    Wenn du glaubst das hilft einem Anfänger oder würde ihn überhaupt interessieren, dann tust du mir Leid....

    jemand, der im C++ Forum mit C Filehandling herumspielt sollte schon soweit fortgeschritten sein, dass ihn dieser Ratschlag nicht stören dürfte 😉

    und wenn ich den ablauf, der dahintersteckt, verstehen will, benutze ich assembler 😃



  • Original erstellt von nman:
    Naja, so "objekt"orientiert wie ein Datentyp in C halt sein konnte, wie sollte fprintf() denn sinnvollerweise in einen String schreiben können wenn Funktionen nicht überladen werden können?

    Funktionsüberladung braucht's da nicht.
    Es müsste einfach möglich sein, einen 'FILE*' auf einen 'STRING' zeigen zu lassen. fprintf würde dann in den 'STRING' schreiben. Das ist in C natürlich möglich (Stichwort 'void*'). ZB in dem alle Zeiger der »von FILE abgeleiteten Klassen« Strukturen sind, die einen (sinnvoll initialisierten) Funktionszeiger enthalten, die die eigentliche Arbeit machen.

    [ Dieser Beitrag wurde am 29.05.2003 um 00:45 Uhr von Daniel E. editiert. ]



  • Hmm, ich schätze genau darum sollte jemand der normalerweise kein C programmiert die Klappe halten wenns um C-spezifische Themen geht... *bg*



  • 1.Lese Datei1 in string.
    2.hänge Datei2 an den string hinten dran.
    3.speichere den string in Datei3.

    Hat er gesagt er will Files in string puffern und dann den String in eine Datei schreiben? Er wollte einfach nur eine Datei in eine andere schreiben und dann noch eine Dranhängen. Deshalb denke ich schon, dass ein "Sende die erste Datei an die Ausgabedatei und dann die zweite auch noch" einfacher ist, als ein puffer die erste zwischen, häng die zweite an den Puffer an und speicher den puffer in die Ausgabedatei.



  • Ob es nun ein Puffer vom Typ string ist, oder es 'direkt' angehängt wird, es läuft immer über einen Puffer, da immer erst lesen und dann schreiben.
    Puff aus Schluß vorbei.



  • Ja, aber einmal muss man sich expliziet darum kümmern das andere mal nicht. Abstraktion ist das A und O beim Programmieren.



  • Das ist genau das worum es geht. Manche Leute schreiben irgendwelchen prima Code ohne zu wissen was da eigentlich passiert.
    Aber Hauptsache schön kurz und vielleicht auch noch 'objektorientiert'. 🙄



  • Ganz einfach, weil es manchmal scheiß egal ist. Um etwas zu verwenden muss ich wissen, was es macht, nicht wie es das macht. Sonst müsste ich ja bei jeder Bibliothek, die ich verwende erstmal die Firma anschreiben, sie sollten mir doch bitte den Quellcode zuschicken, da ich gerne wüsste, wie sie es denn implementiert haben.
    Darum geht es aber nicht. Wenn ich sage schreib das auf die Platte, dann soll er es auf die Platte schreiben unabhängig, ob dabei ein Puffer, zehn Puffer oder gar kein Puffer verwendet wird. Ich hab mir auch noch nie die genaue implementation der STL meines Compiler angesehen. Ich weiß, was eine doppelt verkettete Liste ist, wüsste auch im Notfall, wie ich eine implementiere, verwende aber trotzdem einfach std::list.



  • Das ist schlecht, wenn man nicht weiss was sein Programm eigentlich macht.
    Man braucht nicht unbedingt den Quellcode um das zu wissen.
    Gibt genug Bücher über Standartbibliotheken.
    Diese Bücher haben die meisten allerdings nicht, und klatschen sich so durch probieren ihren Code zusammen.
    Funktioniert ... weiß aber nicht warum.



  • Mensch leute, kommt ma wieder runter ___

    Also:
    -----
    Wie villeicht schon erwähnt machst du es wie folgt:
    - Datei1 einlesen und in datei3 speichern (schreiben bzw erzeugen)
    - Datei2 einlesen und an datei3 anhängen
    Zeichenweise, oder zeilenweise oder wie auch immer ^^ (kannst auch binär arbeiten *g*)

    Währe villeicht noch ganz interessant zu erfahren, wobei du genau nur "Bahnhof" verstehst 😉 Immer schön fragen, wenn was unklar ist _

    zum OT:
    Meistens ist es erstmal sinnvoller einige sachen hinzunehen
    und erstmal nicht zu hinterfragen, bis man tiefergreifende konzepte verstanden hat. Wenn ich C++ von anfangan lerne sollte es mich erstmal nicht interessieren wie etwas intern funzt, sonder was ich tun muss damit es korrekt arbeitet.
    Später kann ich mich mit dem rest rumschlagen (oder es sein lassen*g*).

    Wenn man C Codet ist man logischerweise von anfang an "gezwungen" sich mit FILE* usw rumzuschlagen.
    Ich persönlich bevorzuige es, weils mir inzwischen flott von der hand geht.

    Dazu auch gleich ne Frage:
    Gibt es tiefergehende unterschiede zwischen Den FileIO-Streams und den Funktionen unter C, AUßER die Objektorientiertheit?
    Ich persönlich habe immer das gefühl effizienter zu arbeiten, wenn ich mit reinem C Code, weil ich wehniger ungenutzte Funktionen usw mitschleppe. Wie schauts wirklich aus?

    Greettz
    THE_FreaK


Anmelden zum Antworten