Hallo, meine Aufgabe ist es mit einer C-ähnlichen Programmiersprache bestimmte Positionen zu beobachten, diese in ein CSV-File aufzunehmen bzw. wieder zu löschen. Leider habe ich nicht viele Funktionen, um dieses CSV-File zu organisieren. Ich kann meinen File-Pointer ans Ende, an den Anfang und an eine best. Stelle setzen. Ich kann lesen und schreiben - aber nicht einfügen und einen Datensatz rauslöschen. Die Datensätze soll ich noch dazu nach dem Typ der Position sortieren. Einfügen: Ich habe erst gedacht, ich suche mit die passende Stelle im File und füge dann den Datensatz ein - habe aber dummerweise damit den bestehenden gelöscht :-( Löschen: Wenn ich auslese, sind die Daten natürlich noch da. Dann kann ich den zu löschenden mit dem nächsten Datensatz überschreiben, aber dann habe ich am Ende ja noch was über, das möchte ich ja auch nicht mit " " überschreiben. Wäre es da nicht besser, wenn ich jedesmal, wenn ein neuer Datensatz kommt, das File komplett neu anzulegen?
Super... Denkfehler! Ich muss die Zeit mit Abspeichern, zu der der Datensatz entstand > jedesmal komplett neu erzeugen ist nicht, da mir da die Info verloren gegangen ist... Dann bleibt wohl nur noch kopieren und das Originalfile jedesmal komplett zu löschen - nur ist das nicht sehr umständlich, für diese einfache Aufgabe?!
CSV-Dateien sind aus genau diesem Grund kein Datenbankersatz. Am sinnvollsten sind sie nur "wachsend" zu verwenden, d.h. neue Datensätze werden hinten angehängt. Sofern die Zeilenlänge nicht verändert wird, kann auch ein einzelner Datensatz verändert werden, d.h. z.B. die Zahl 1234 zur Zahl 5678 verändert werden. Aber aus 1 z.B. 123 zu erzeugen, ist nicht möglich, da sich die Zeilenlänge verändern würde, und daher alles, was nach der betreffenden Zeile kommt, verschoben (d.h. komplett neugeschrieben) werden müsste. Hier kann man sich behelfen, wenn man dafür sorgt, daß jeder Datensatz exakt die gleiche Zeilenlänge verwendet, was z.B. durch Einfügen einer "Dummy"-Spalte mit variabler Anzahl von Leerzeichen darin möglich ist. Ein gelöschter Datensatz besteht dann nur noch aus Leerzeichen. Dann lassen sich einzelne Datensätze auch durch direktes Positionieren innerhalb der Datei auffinden, statt den jeweils nächsten Zeilenumbruch suchen zu müssen. Aber auch dann ist das Einfügen von Datensätzen mit dem Neuschreiben aller nachfolgenden Datensätze verbunden. Und der Nachteil ist der doch erheblich gestiegene Speicherverbrauch. Sinnvoller wäre es, die Daten nicht in einer CSV-Datei vorzuhalten, sondern z.B. in einer Datenbank à la SQLite, und nur bei Bedarf die Daten in korrekter Sortierung im CSV-Format zu exportieren.
Vielen herzlichen Dank!!!!!! Das hat mir sehr geholfen und mir wurde die Aufgabenstellung und somit mein Lösungsweg schon viel klarer!!!
Gegebenenfalls könnte man auch Änderungsvermerke anhängen, d.h. in irgendeiner Form "Zeile 123 ist nicht mehr gültig. Neu ist der Inhalt a,b,c" Eventuell so, wie wir es ganz früher in BASIC gemacht haben: Zeilennummer in 10-er SChritten. Da kann man noch Zeilennummern zwischen einfügen. Die Auswertesoftware muß das dann aber richten, es ist nix mehr mit EXCEL. Oder man lädt das File am PC erst einmal in ein selbstgeschriebenes Korrekturprogramm, das ein normales CSV draus macht. Grundsätzlich würde ich Datum und Zeit als seperate Spalte pro Datenzeile einfügen und nicht das Datum aus dem filenamen verwenden. Dann empfiehlt es sich, jede Zeile und Datenfeld gleich lang zu halten, vorlaufende Leerstellen in jedem Datenfeld sind schließlich nicht verboten. Böse Erfahrung am Rande: Excel kann nur 32000 Zeilen (ich kenne aber nur ältere Versionen) und LibreOffice ist nur wenig besser.
abc.def schrieb: > Böse Erfahrung am Rande: Excel kann nur 32000 Zeilen (ich kenne aber nur > ältere Versionen) und LibreOffice ist nur wenig besser. Genauer: Excel 5.0: 16.384 Zeilen, 256 Spalten. Excel 97 und 2003: 65.536 Zeilen, 256 Spalten. Excel 2007, 2010, 2013: 1.048.576 Zeilen, 16.384 Spalten. Excel 2016: Keine Ahnung, hat sich vermutlich nicht geändert. OpenOffice/LibreOffice Calc: 1.048.576 Zeilen, 1.024 Spalten. Ob das generell gilt oder ob es beim Import formatspezifische Einschränkungen gibt, weiß ich allerdings nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.