Daten aus string Spaltenweise in Textdatei speichern



  • @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.


  • Mod

    Was du vor hast ist so ein typischer Algorithmus von reichen, verwöhnten Einzelkindern: Hat unendlich Geld, alles wird immer klappen, fürchtet keine Konsequenzen, denkt nicht an andere.

    Da du nicht selber darauf kommst, hier ein paar Szenarien:

    Szenario Einzelkind Streamingalgo
    anderer Prozess greift auf Datei zu anderer Prozess bekommt falsche/keine Daten. Problematik ist unlösbar! kein Problem möglich
    anderer Prozess hat Datei gelockt kommt gar nicht zurecht kein Problem, solange es irgendwann released wird
    Platte voll beim Schreiben Braucht Sondercode, der diesen Fehler abfängt, Platz macht, und Ursprungszustand herstellt kein Problem
    anderer Schreibfehler Datenverlust bis separate Wiederherstellung läuft kein Problem
    Name der Backup Datei ist schon belegt Braucht Sondercode, der diesen Fall abfängt. Lösungsansatz unklar kein Problem möglich, Tempdatei wird beim OS bestellt
    Name der Backupdatei ist ungültig Braucht Sondercode, der diesen Fall abfängt. Lösungsansatz unklar kein Problem möglich, Tempdatei wird beim OS bestellt
    Keine Schreibrechte für andere Dateien in Verzeichnis Braucht Sondercode, der diesen Fall abfängt. Lösungsansatz unklar kein Problem möglich, Tempdatei wird beim OS bestellt
    Weitere Race conditions Programmierer muss auf weitere Race Conditions mit den Dateien achten. Diese Probleme sind zwar alle lösbar, aber der Programmierer muss dran denken (Hättest du? Nenn doch mal ein paar!) . Ich habe nur die unlösbaren gelistet. keine Probleme möglich
    Fehler 2. Ordnung, also wenn während Fehlerbehandlung etwas schief geht Katastrophe! Hat ja erst gar keine Probleme
    Arbeitsspeicher voll Braucht Sondercode, um das abzufangen. Was gar nicht so einfach ist, weil das OS vielleicht den Prozess abschießt, wenn zu viel Speicher belegt. Sonst Datenverlust bis separate Wiederherstellung braucht sowieso so gut wie keinen Speicher, aber selbst wenn, kein Problem
    andere abnormale Programmterminierung (externer Kill, Stromausfall, Programmierfehler, etc. ) Datenverlust bis separate Wiederherstellung kein Problem
    Programmierkomplexität braucht Abwägung zwischen Effizienz der Datenstruktur und Speicherbelegung der Datenstruktur. Die ganzen Sonderfehlerabfangcodes gar nicht eingerechnet Die naive Lösung ist schon maximal effizient, Speicherbelegung minimal. Mit etwas mehr Aufwand ist Speicherbelegung beliebig minimierbar. Keine Fehlerbehandlung nötig.
    Prozesskomplexität Braucht weiteren Wiederherstellungsprozess für Fehlerfälle, dessen Einsatz irgendwie koordiniert sein muss Keine
    Anwendbarkeit auf Daten unbekannter Größe, z.B. Devicefiles, Sockets, u.v.a.m. Nein Ja

    Besonders der erste Punkt ist fatal und unlösbar. Ein Prozess der dafür sorgt, dass die Daten für andere Prozesse in einem undefinierten Zustand sind, während er läuft? Absolut unverzeihlich.



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

    Was du vor hast ist so ein typischer Algorithmus von reichen, verwöhnten Einzelkindern

    Ich stimme dir in den Argumenten der Tablle zu. Aber: das hat NICHTS mit Einzelkindern zu tun. Also bitte hier keine Beleidigungen! Danke.

    Zum ersten Argument noch bei dem "Stramingalgo": "kein Problem möglich" stimmt nicht so ganz, das Problem "liest veraltete bzw. gerade veraltende Daten" ist möglich, sofern nicht mit Locks gearbeitet wird.



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

    Was du vor hast ist so ein typischer Algorithmus von reichen, verwöhnten Einzelkindern: Hat unendlich Geld, alles wird immer klappen, fürchtet keine Konsequenzen, denkt nicht an andere.

    1. ich hab noch mehr Geschwister, was hier aber nichts zur Sache tut.
    2. Ich verdiene mein Geld schon etliche Jahre selbst. Was dich eigentlich auch nichts an geht.
    3. deine Einschätzungen sind wie schon die ganze Zeit so daneben, das es schon nicht mehr schön ist

    Wie sieht es eigentlich aus, wird hier im allgemeinen der Thread nicht geschlossen von irgendeinen Mod wenn der zu Offline wird? ach ne der der Ständig so komische annahmen hier Preis gibt anstatt beim Thema zu bleiben ist ja selbst Mod. Schade hier wird eben alles wie immer mit zweierlei Maß gesehen.

    Ach so deine tolle Tabelle, du kannst dir selbst beantworten was ich davon halte und wie weit das weg ist vom eigentlichen Thema, ich würde Sagen so weit wie die Erde und die Sonne entfernt ist.


  • Mod

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

    Zum ersten Argument noch bei dem "Stramingalgo": "kein Problem möglich" stimmt nicht so ganz, das Problem "liest veraltete bzw. gerade veraltende Daten" ist möglich, sofern nicht mit Locks gearbeitet wird.

    An welcher Stelle denn? Die alten Daten (die während dieser Zeit aktuell sind) sind die ganze Zeit da, während die neuen erzeugt werden. Wenn die neu erzeugten Daten zu den aktuellen Daten werden, wird atomistisch (aus Sicht es Dateisystems) die Datei umbenannt und man bekommt ohne Unterbrechung die nun aktuellen Daten. Wenn ein anderer Prozess vorher einen Handle auf die alten Daten geholt hat, dann sieht er noch die alten Daten, aber das ist ja normal, dass man den Zustand einer Datei hat, wie sie war, als man den Handle geholt hat.

    Irgendwo auf Dateisystemebene sitzen da natürlich Lock-Strukturen, aber das ist ja dort gelöst, damit wir uns nicht zu kümmern brauchen.



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

    An welcher Stelle denn? Die alten Daten (die während dieser Zeit aktuell sind) sind die ganze Zeit da, während die neuen erzeugt werden.

    Genau. Und dann lesen 2 Programme diese Datei. Das eine (das hier beschriebene) ersetzt die Datei. Ein anderes erzeugt damit irgendwas anderes. Und ist das vom anderen Programm erzeute nicht mehr passend - weil von alten Datenstand ausgehend. Daher halte ich "kein Problem möglich" für zu krass. Es sind immer viele Probleme möglich, wenn eine Datei geändert wird. Ich könnte mir z.B. vorstellen, dass die Datei irgendwohin sychronisiert wird. Dann wird irgendwie zurücksynchronisiert und der jetzt fertige neue Stand überschrieben. Was auch immer, viele Probleme sind hier denkbar, die hier gar nicht beachtet werden (und auch nicht müssen). Aber zu denken, man wendet das so an und ist alle anderen Probleme los, ist zu stark.


  • Mod

    Dieser Beitrag wurde gelöscht!

  • Mod

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

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

    An welcher Stelle denn? Die alten Daten (die während dieser Zeit aktuell sind) sind die ganze Zeit da, während die neuen erzeugt werden.

    Genau. Und dann lesen 2 Programme diese Datei. Das eine (das hier beschriebene) ersetzt die Datei. Ein anderes erzeugt damit irgendwas anderes. Und ist das vom anderen Programm erzeute nicht mehr passend - weil von alten Datenstand ausgehend. Daher halte ich "kein Problem möglich" für zu krass.

    Verstehe, worauf du hinaus willst. Ja, wenn mehrere Prozesse Änderungsrechte an der Datei haben, kann es problematisch werden. Ich ändere

    Szenario Einzelkind Streamingalgo
    anderer Prozess hat Datei gelockt kommt gar nicht zurecht kein Problem, solange es irgendwann released wird

    zu

    Szenario Einzelkind Streamingalgo
    anderer Prozess hat Datei gelockt kommt gar nicht zurecht Problematisch, falls anderer Prozess schreibt, sonst kein Problem, solange der Lock denn irgendwann released wird

    Wenn aber ein anderer Prozess eine andere Datei erzeugen möchte auf Grundlage der Daten während der Änderungsphase, ist das kein Problem. Es gibt einen Zeitpunkt X, an dem wird die Tempdatei zur offiziellen Datenquelle. Ab da sind die neuen Daten die richtigen Daten. Wenn da vorher jemand liest und mit den Daten etwas tut, dann hat er korrekt die zu dem Zeitpunkt offiziellen Daten erhalten. Ob unser Spalteneinfügeprozess zu dem Zeitpunkt lief oder nicht ist unerheblich. Das gleiche wäre ja auch passiert, wenn der zweite Prozess 1 Sekunde vor dem Spalteneinfügeprozess gestartet wäre, dann würde sein Ergebnis auch nicht zu den später geänderten Daten passen. Entscheidend ist der Zeitpunkt X, an dem die Tempdatei zur offiziellen Datei wird. Das ist der Moment, ab dem die Zusatzspalten zu den offiziellen Daten werden. Alles, was davor die Daten las, hat korrekte, selbstkonsistente Daten ohne Zusatzspalten bekommen. Das waren zu dieser Zeit auch die korrekten Daten, egal ob irgendwo temporär schon an den neuen Daten gearbeitet wurde oder nicht. Alle Zugriffe danach ergeben die Daten mit den Zusatzspalten, was auch vollkommen korrekt ist.

    Das ist so, als würdest du ein Foto (mit Film) von einem Monitor machen, und während du den Film noch entwickelst, wird die Anzeige auf dem Monitor geändert. Da würdest du ja nicht überrascht sagen, dass auf dem Foto das falsche abgebildet wäre.



  • @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 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.

    Ich weiss nicht was an der von mir vorgeschlagenen Variante grossartig umständlicher sein soll. Ich würde sagen das nimmt sich nicht viel. Also abgesehen von den anderen Vorteile, auf die du ja schon hingewiesen wurdest (braucht weniger Speicher, ist sicherer).



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

    Ich weiss nicht was an der von mir vorgeschlagenen Variante grossartig umständlicher sein soll. Ich würde sagen das nimmt sich nicht viel. Also abgesehen von den anderen Vorteile, auf die du ja schon hingewiesen wurdest (braucht weniger Speicher, ist sicherer).

    Sorry ich wollte dich nicht angreifen, beleidigen, herabsetzen oder sonst was, sondern einfach nur eine andere Möglichkeit darstellen. Das dann natürlich aus einer simplen Datei mit paar Zeichen eine Mega Datei gemacht wird die von mehreren Prozessen gelesen und geschrieben wird und der PC worauf das ganze läuft nur 64kb Ram hat und man deswegen auch noch Speicher sparen muss, das hab ich nicht voraus gesehen. Asche auf mein Haupt. Ich hätte doch warten sollen mit meinem unfähigen Beitrag bis meine Kristallkugel aus der Werkstatt wieder da ist, dann wäre mir dieser Fehler sicherlich nicht passiert.


Anmelden zum Antworten