Forum: PC-Programmierung File Handling auf unserer Ebene


von sunshineh (Gast)


Lesenswert?

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?

von sunshineh (Gast)


Lesenswert?

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?!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von sunshineh (Gast)


Lesenswert?

Vielen herzlichen Dank!!!!!!

Das hat mir sehr geholfen und mir wurde die Aufgabenstellung und somit 
mein Lösungsweg schon viel klarer!!!

von abc.def (Gast)


Lesenswert?

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.

von Flauschig-weicher Qualitätsgarant (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.