Daten aus string Spaltenweise in Textdatei speichern



  • @GruenerKobold
    Also @Swordfish brauch deine Hilfe ganz sicher nicht. Du bist Anfänger und hier im Forum gibts ne Menge Leute die wirklich gut C++ können. Swordfish gehört dazu, ist aber ein Troll durch und durch. Ich gehe also stark davon aus er hätte eine bessere, sauberere und performantere Lösung gefunden als du. Bleib also am besten höflich und spring nicht auf Trolle wie ihn an 😁


  • Mod

    @Zhavok sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @GruenerKobold
    Also @Swordfish brauch deine Hilfe ganz sicher nicht. Du bist Anfänger und hier im Forum gibts ne Menge Leute die wirklich gut C++ können. Swordfish gehört dazu, ist aber ein Troll durch und durch. Ich gehe also stark davon aus er hätte eine bessere, sauberere und performantere Lösung gefunden als du. Bleib also am besten höflich und spring nicht auf Trolle wie ihn an 😁

    Ist ja für den fremden Fragesteller nicht ersichtlich, wer Swordfish ist. Von dem hier gezeigten Benehmen her, würde die Einschätzung passen. Absolut daneben und nicht hilfreich.



  • @GruenerKobold sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @Swordfish
    Du scheinst ja auch nicht keinen Plan zu haben wie man an deinem Kommentar sieht.

    Stimmt. Von doppelter Verneninung schon mal gehört?


  • Gesperrt

    Hallo @GruenerKobold ,

    das ist eine Standardfrage, deshalb lachen dich die anderen aus... verzeihe ihnen, jeder fing mal klein an...

    https://stackoverflow.com/questions/13035674/how-to-read-a-file-line-by-line-or-a-whole-text-file-at-once


  • Mod

    @EinNutzer0 sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Hallo @GruenerKobold ,

    das ist eine Standardfrage, deshalb lachen dich die anderen aus... verzeihe ihnen, jeder fing mal klein an...

    https://stackoverflow.com/questions/13035674/how-to-read-a-file-line-by-line-or-a-whole-text-file-at-once

    Frage nach spaltenweisen Schreiben. Link führt zu zeilenweisem Lesen. Buchstäblich das exakte Gegenteil.

    Was ist denn los heute? Ist irgendwie allgemeiner Trolltag und jeder weiß es, nur ich nicht? Das ist doch eine ganz normale, klare Frage. Wieso kommen nur Schrottantworten, teils in ziemlich pampigen Tonfall, und das von etablierten Forennutzern?


  • Gesperrt

    @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Buchstäblich das exakte Gegenteil

    Er braucht wohl beides, du Schlauberger 😉


  • Gesperrt

    @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Was ist denn los heute?

    Weiß ich nicht, es ist Mo., der 7. November... Hat Karneval schon angefangen? 😃



  • @EinNutzer0 sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Buchstäblich das exakte Gegenteil

    Er braucht wohl beides, du Schlauberger 😉

    In seinem Text und in seinem Code ist nicht ein einziger Hinweis darauf, dass er irgendetwas lesen möchte ...



  • @GruenerKobold
    Wenn du das Format des Files selbst bestimmen kannst, dann würde ich vorschlagen die Daten einfach in der Reihenfolge reinzuschreiben wie sie im Programm entstehen.

    Dann kannst du die ersten "AAA, BBB, CCC" in das File schreiben, und wenn der zweite Satz Werte fertig wird schreibst du den einfach hinten dran.

    In einem File Spalten hinzuzufügen ist wie @SeppJ schon geschrieben hat eben nicht möglich.

    D.h. die einzige Möglichkeit das zu machen wäre das File komplett neu zu schreiben. D.h. du müsstest z.B. das alte File zeilenweise lesen, dann im Speicher an jede gelesene Zeile die gewünschte Spalte anhängen, und die neue Zeile dann wieder in ein 2. File rausschreiben. Und dann, wenn du alle Zeilen durch hast, das 2. File über das 1. drüberkopieren. Dauert lange das zu programmieren und ist auch nicht sonderlich performant in der Ausfürhung. Macht man nicht wenn man nicht muss.



  • @hustbaer sagte in Daten aus string Spaltenweise in Textdatei speichern:

    D.h. die einzige Möglichkeit das zu machen wäre das File komplett neu zu schreiben. D.h. du müsstest z.B. das alte File zeilenweise lesen, dann im Speicher an jede gelesene Zeile die gewünschte Spalte anhängen, und die neue Zeile dann wieder in ein 2. File rausschreiben. Und dann, wenn du alle Zeilen durch hast, das 2. File über das 1. drüberkopieren. Dauert lange das zu programmieren und ist auch nicht sonderlich performant in der Ausfürhung. Macht man nicht wenn man nicht muss.

    Also warum du mit 2 Files agierst und das so umständlich machst versteh ich nicht oder sollte das zur einfacheren Erklärung sein? Denn der einfachste Weg ist doch das File Zeilenweise bis zum Zeilenumbruch in einen String zu lesen: Dann packt man die neue "Spalte" hinten an und den Zeilenumbruch. Das ganze jetzt für jede Zeile wiederholen und wenn man alle Zeilen durch hat, dann das ganze in die gleiche Datei wieder schreiben. Fertig ist das ganze, kein Zauberwerk und keine großartige Sache.



  • @CTecS sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @hustbaer sagte in Daten aus string Spaltenweise in Textdatei speichern:

    D.h. die einzige Möglichkeit das zu machen wäre das File komplett neu zu schreiben. D.h. du müsstest z.B. das alte File zeilenweise lesen, dann im Speicher an jede gelesene Zeile die gewünschte Spalte anhängen, und die neue Zeile dann wieder in ein 2. File rausschreiben. Und dann, wenn du alle Zeilen durch hast, das 2. File über das 1. drüberkopieren. Dauert lange das zu programmieren und ist auch nicht sonderlich performant in der Ausfürhung. Macht man nicht wenn man nicht muss.

    Also warum du mit 2 Files agierst und das so umständlich machst versteh ich nicht oder sollte das zur einfacheren Erklärung sein? Denn der einfachste Weg ist doch das File Zeilenweise bis zum Zeilenumbruch in einen String zu lesen: Dann packt man die neue "Spalte" hinten an

    Die neue Spalte steht aber erst ein paar Zeilen weiter in der Datei.


  • Mod

    @CTecS sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Also warum du mit 2 Files agierst und das so umständlich machst versteh ich nicht oder sollte das zur einfacheren Erklärung sein? Denn der einfachste Weg ist doch das File Zeilenweise bis zum Zeilenumbruch in einen String zu lesen: Dann packt man die neue "Spalte" hinten an und den Zeilenumbruch. Das ganze jetzt für jede Zeile wiederholen und wenn man alle Zeilen durch hat, dann das ganze in die gleiche Datei wieder schreiben. Fertig ist das ganze, kein Zauberwerk und keine großartige Sache.

    Zwischendurch lagerst du die ganze Datei, egal wie groß, im Speicher zwischen? Wenn beim Schreiben etwas schief geht, sind die Ursprungsdaten unwiederbringlich futsch? Und das, um einen einzigen Move am Ende zu sparen?

    Du schätzt falsch ein, wo die Unterschiede liegen und was sie bedeuten. Als Faustregel sind Streamingalgorithmen eigentlich immer besser, wenn sie in Frage kommen.


  • Mod

    Noch ein Nachtrag: Der Grund, warum das nicht geht, ist ja, dass Dateien ein diffuser Zeichenstrom sind, mit einem Anfang, einer Stelle an der man gerade ist, und einer Möglichkeit das Ende zu erkennen. Da kann man also nichts einfügen, sondern nur anhängen oder ändern. Das ist der kleinste Nenner dessen, was man so allgemein als Datei bezeichnet.

    Aber das stimmt ja nicht für alles was man so als Datei bezeichnet. Denn zumindest wenn die Datei physisch auf einem Blockgerät gespeichert ist (also das, was die meisten Nicht-Informatiker unter einer "Computerdatei" verstehen würden), dann besteht die Datei aus klar nummerierten Blöcken in einer bestimmten Reihenfolge. Und da könnte man auch weitere Blöcke mitten drin einfügen. Das ist aber Sache des Dateisystems, an dem man normalerweise tunlichst nicht herumschrauben sollte, und weshalb die Dateienschnittstelle eines Betriebssystems und die darauf aufbauende C++-Dateienschnittstelle einen nicht daran lassen.

    Ich dachte, das wäre alles, aber der Neugierde habe ich noch einmal geguckt, und siehe da: Linux (und zwar nur Linux, nicht allgemeines Posix!) hat tatsächlich einen Systemcall, um (Block-)Dateien auf Blockebene zu manipulieren. Das heißt, man kann tatsächlich Blöcke in der Mitte einfügen oder entfernen. Für Windows hatte ich nicht die Energie, das auch noch zu recherchieren.

    Das ist in diesem speziellen Fall so natürlich nutzlos. Ein Block hat eine feste Größe, die vom Dateisystem (oder gar der Hardware) fest vorgegeben ist, und man kann daher nur an den Grenzen dieser Blöcke etwas einfügen oder entfernen, und das Eingefügte und Entfernte hat dann exakt die Blockgröße. Was halt seltenst exakt mit den Ansprüchen für die Spalten zusammenfallen wird. Aber wenn unbedingt ein Dateiformat benötigt, das Einfügen oder Löschen in der Mitte erlauben soll, dann kann man so etwas tatsächlich aufziehen, wenn man diese Beschränkungen im Hinterkopf behält. Das könnte zum Beispiel ganz nützlich sein, wenn man ein Datenbanksystem schreiben möchte.



  • @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @CTecS sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Also warum du mit 2 Files agierst und das so umständlich machst versteh ich nicht oder sollte das zur einfacheren Erklärung sein? Denn der einfachste Weg ist doch das File Zeilenweise bis zum Zeilenumbruch in einen String zu lesen: Dann packt man die neue "Spalte" hinten an und den Zeilenumbruch. Das ganze jetzt für jede Zeile wiederholen und wenn man alle Zeilen durch hat, dann das ganze in die gleiche Datei wieder schreiben. Fertig ist das ganze, kein Zauberwerk und keine großartige Sache.

    Zwischendurch lagerst du die ganze Datei, egal wie groß, im Speicher zwischen? Wenn beim Schreiben etwas schief geht, sind die Ursprungsdaten unwiederbringlich futsch? Und das, um einen einzigen Move am Ende zu sparen?

    Du schätzt falsch ein, wo die Unterschiede liegen und was sie bedeuten. Als Faustregel sind Streamingalgorithmen eigentlich immer besser, wenn sie in Frage kommen.

    Wieso sollte ich das falsch einschätzen? Ich bin nicht davon ausgegangen das ich explizit auch noch darauf hinweisen muss das man die alte Datei vorher als .bak umbenennen kann/sollte bevor man die neue Datei schreibt. Das sollte doch jeder für sich selbst entscheiden können.

    Mit zum Schluss 3 Dateien rum zu frickeln macht die ganze Sache sicher auch nicht Sicherer und klar kann man seine Daten als Stream raus schreiben. Möglichst noch die Rohdaten einfach hintereinander, eine Version der einzelnen Dateistände ist dann auch nicht mehr drin. Aber das auseinander zu nehmen würde den Rahmen hier sprängen und auch weit vom eigentlichen Thema ab kommen. Denn Möglichkeiten gibt es viele zum Ziel zu kommen, nur ist immer die Frage in wieweit der TO das versteht.


  • Mod

    @CTecS sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Mit zum Schluss 3 Dateien rum zu frickeln macht die ganze Sache sicher auch nicht Sicherer

    Wieso sollte ich das falsch einschätzen?

    Weil du nicht einmal korrekt bis 3 zählen kannst…



  • @CTecS

    Ich bin nicht davon ausgegangen das ich explizit auch noch darauf hinweisen muss das man die alte Datei vorher als .bak umbenennen kann/sollte bevor man die neue Datei schreibt.

    Darum geht es nicht. Lies den Text von SeppJ noch einmal.

    Wenn dein Programm (oder der Computer) mittendrin abstürzt, hinterlässt dein Programm eine fehlerhafte Datei. Bei SeppJ ist das nicht der Fall.



  • @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Weil du nicht einmal korrekt bis 3 zählen kannst…

    aber ich troll ^^



  • @SeppJ sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @CTecS sagte in Daten aus string Spaltenweise in Textdatei speichern:

    Mit zum Schluss 3 Dateien rum zu frickeln macht die ganze Sache sicher auch nicht Sicherer

    Wieso sollte ich das falsch einschätzen?

    Weil du nicht einmal korrekt bis 3 zählen kannst…

    Schade das du dich auf so ein Niveau begibst, im allgemeinen dachte ich das hier über Probleme diskutiert wird aber hier darf sich der Mod ausdrücken wie er mag, solange es nicht der schnöde Forenteilnehmer macht, ich dachte ich hatte da mal irgend wo was von Etikette gelesen

    @wob sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @CTecS

    Ich bin nicht davon ausgegangen das ich explizit auch noch darauf hinweisen muss das man die alte Datei vorher als .bak umbenennen kann/sollte bevor man die neue Datei schreibt.

    Darum geht es nicht. Lies den Text von SeppJ noch einmal.

    Wenn dein Programm (oder der Computer) mittendrin abstürzt, hinterlässt dein Programm eine fehlerhafte Datei. Bei SeppJ ist das nicht der Fall.

    Ich bin der Meinung das es keinen Unterschied macht, denn wenn er beim schreiben der Zwischendatei ab stürzt ist das Ergebnis das gleiche, das gleiche gilt beim schreiben der Enddatei, denn auch mit der org. Datei und der Zwischendatei kann man nichts anfangen, aber wie gesagt das ist meine Meinung und ihr seit anderer Meinung, das ist legitim.



  • @CTecS Transaktionssicherheit. Undefinierte Zustände nach einem Prozess sind auf jeden Fall zu vermeiden. vgl. Transaktion.



  • @Swordfish sagte in Daten aus string Spaltenweise in Textdatei speichern:

    @CTecS Transaktionssicherheit. Undefinierte Zustände nach einem Prozess sind auf jeden Fall zu vermeiden. vgl. Transaktion.

    Ich versteh schon was du sagen willst, nur was nützt dir das Zwischenergebnis wenn er beim schreiben des Endergebnis nichts raus bring weil er da abgestürzt ist? Genau nichts.

    Bei Software die lange läuft, sollte so und so ein Log-File geschrieben werden, darin sollte man dann auch nachvollziehen können was wie passiert ist. Alternativ kann man sich auch einen Memory-Dump schreiben lassen und den Analysieren. Wie gesagt alles für größer Projekte die 24/7 laufen. Für Sachen die vielleicht nur für einen User sind oder mehrere die aber kurz laufen ist diese Betrachtung eher irrelevant.

    Um das anders zu sagen bei mir würde es keine Undefinierten Zustände geben. Wenn die zu ladente Datei Klarschlag ist dann wird die gelöscht und die bak-Datei dafür benutzt. Wo ist das Problem? Transaktionssicherheit bedeutet nicht automatisch das man jeden schritt in eine Datei schreiben muss.


Anmelden zum Antworten