Mit Ofstream text einfügen in ein txt-file



  • ich möchte mit Ofstream in eine Datei an einer bestimmten Stelle Text einfügen, ohne dabei den darauffolgenden Text zu überschreiben. gibt es hierzu eine bestimmte Funktion?

    Vieln Dank.

    mfg
    Alex



  • Nein gibts nicht. Musst halt den Rest, ab der Schreibposition, auslesen. Den neuen Inhalt schreiben und dann das vorher ausgelesene hintenranhängen.



  • jo so hab ich mirdas auch schon gedacht. ist aber verdammt mühselig.



  • Was hast du denn genau mit der Textdatei vor? Wenn du sehr viel einfügen und umkopieren willst, solltest du die Datei komplett in den Speicher laden (z.B. in einen vector<char> oder string), dort verarbeiten und am Ende wieder zurück auf Platte schreiben.



  • naja ich ein bereits fertiges txt-file. Das ganze ist NC-Code(Snchronaktionen- Werkzeugmaschinentechnik)(nebensächlich). oben stehen ein paar define anweisungen. unten kommt code. jetzt möchte ich aber zusätlich ganz oben im File define-Anweisungen einfügen. Anschließend aber unten Code schreiben. Wenn ich jetzt zu erst den Kompletten Text auslese der nach meiner einzufügenden define anweisung steht, wird das ganz schön viel txt. Wie kann ich das denn am besten das zeug auslesen und in was für eine Variable schreib ich das bei string muss ich doch aufpassen wegen Speicherüberlauf und so oder?

    ich könnt auch CString (ATL/MFC) verwenden.



  • Alex171184 schrieb:

    naja ich ein bereits fertiges txt-file. Das ganze ist NC-Code(Snchronaktionen- Werkzeugmaschinentechnik)(nebensächlich). oben stehen ein paar define anweisungen. unten kommt code. jetzt möchte ich aber zusätlich ganz oben im File define-Anweisungen einfügen. Anschließend aber unten Code schreiben. Wenn ich jetzt zu erst den Kompletten Text auslese der nach meiner einzufügenden define anweisung steht, wird das ganz schön viel txt.

    Hast du die Datei ursprünglich selber angelegt? Wenn ja, solltest du vielleicht einen Schritt zurückgehen und die nötigen define's gleich einsetzen.

    Wie kann ich das denn am besten das zeug auslesen und in was für eine Variable schreib ich das bei string muss ich doch aufpassen wegen Speicherüberlauf und so oder?

    Wie ich schon gesagt habe: std::vector<char> oder std::string - die kümmern sich beide elber um ihre Größe. (du darfst natürlich nicht blindlings per [] in ihren Daten rumstochern, das geht nur in die Hose)



  • Ach so ist das. alles klar einen Schritt zurück kann ich nicht. das ding wird zwar vorher angelegt von mir, allerdings von einem anderen Tool aus und da kann ich noch nicht eingreifen weil ich erst später weiß ob was für defines ich einbinden muss.

    Also gut dann werd ich mir mal ne funktion schreiben die mir alles ausließt, einfügt, einschreibt.

    Danke für eure Hilfe.



  • Alex171184 schrieb:

    Ach so ist das. alles klar einen Schritt zurück kann ich nicht. das ding wird zwar vorher angelegt von mir, allerdings von einem anderen Tool aus und da kann ich noch nicht eingreifen weil ich erst später weiß ob was für defines ich einbinden muss.

    Nur am Rande: Woher bekommst du die Informationen, welche define's tatsächlich benötigt werden? Vielleicht bringt's ja etwas, wenn du zuerst die benötigten defines herausfindest und in die Datei schreibst und danach das Tool startest, das die Nutzdaten hinten dran hängt. (das müsste nur darauf achten, die Ausgabedatei mit ios::app zu öffnen, sonst überschreibt es deine define's wieder)

    PS: Oder kannst du das Datenformat so umstellen, daß dies define-Anweisungen auch hinter den Nutzdaten stehen können?



  • Also ich schreibe einen mini-Kompiler. und ich bekomme einen Quellcode den ich in eine andere Sprache übersetzen muss. Die Defines werden bereits bevor ich weiß was für einen Quellcode ich übersetzten muss in einem txt-File angelegt (von einem anderen Tool).

    Erst wenn ich dann den Quellcode in meinem Tool habe weiß ich was für defines ich einfügen muss. ICh kann aber auch nicht die define-Anweisungen nach dem Code bringen. Die müssen im Kopf stehen.

    Naja das Leben ist hart. Und Diplomarbeiten ätzend.

    mfg
    Alex


Anmelden zum Antworten