Tom: In Datei schreiben und zwar sortiert

Beitrag lesen

Hello,

  1. Datei öffnen und wort hineinschreiben datei schliessen
  2. Datei öffnen datei in ein array lesen das array sortieren datei schliessen
  3. Datei öffnen alten inhalt überschreiben mit dem array datei schliessen

das kann man doch bestimmt optimiren oder?

Das  __muss__  man, unabhängig von der verwendeten Scriptsprache vermutlich verbessern.
Wenn die Applikation im Mehrbenutzerbetrieb genutzt wird, musst Du auch auf sogenannte Race Conditions, also auf das Laufzeitverhalten und Konkurrenzverhalten unterscheidlicher (Benutzer-)Prozesse achten.

Wenn Du speicherorientiert, also das Gegenteil von speicheroptimiert, arbeiten kannst, die Datei also vollständig in den Speicher passt, und Du trotzdem noch reichlich Speicher übrig hat, dann ist der Umgang mit den Arrays sicherlich der schnellste Weg, denn Jedes Verschieben von daten im Hauptspeicher ist etliche Male schneller, als ein Lesezugriff auf die Festplatte.

Dann muss die Datei aber __vor__  dem Einlesen bereits exclusiv für den gesamten Änderungsprozess gesperrt werden http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/

1. Dateihandle besorgen
   2. Datei exclusiv sperren

Bei vernünftigen Betriebssystemen geht das in einem atomar gekapselten Schritt
   Seit etlichen Jahren auch bei unixoiden.
   Außerdem geht es bei diesen  Systemen auch nur für betroffene Teile der Datei

2b. Dateilänge auslesen
   3. Datei auslesen
   4. Daten im Speicher sortieren, ändern, ergänzen, herauslöschen
   5. Daten zurückschreiben in Datei
   6. Dateilänge anpassen auf neue Länge, wenn kürzer als alte
   7. Datei schließen und _nur__dadurch_ Sperrung freigeben

Die nächste Möglichkeit wäre eine direktgestreute Datei. Diese Möglichkeit ist aber trotz der heute gängingen Festplattengrößen im Allgemeinen immer noch nur eine theoretische Möglichkeit. Direktgestreut bedeutet, dass für jeden möglichen Eintrag ein Platz freigehalten wird im vorher allokierten Persistenen Speicherbereich. Bei UNIXen machte man das bereits beim Anlegen der Dateien, indem man die Anzahl der "Extents" (Ausdehnungen) der Datei festgelegt hat.

Außerdem muss der Wertebereich dafür ordinal sein. Es wäre also unsinnig , für Realzahlen eine direktgestreute Datei einzurichten. Sinnvoll wäre es aber für deutsche Autokennzeichen.

Nun kommt man über diese Überlegung direkt zur nächsgten Möglichkeit: Die Datei in einem Stück wird viel zu groß. So kann man dann filesystemorientiert arbeiten, und dessen Möglichkeiten nutzen. Man legt eine Struktur an, die für jedes mögliche Zeichen an erster Stelle ein Verzeichnis vorsieht.
Darin legt man dann eine Struktur an, die für jedes mögliche Zeichen an zweiter Stelle eine Datei vorsieht... Je nach erlaubtem Wertevorrat (ASCII-Auschnitt 42 Zeichen, 64 Zeichen, 96 Zeichen oder was Dir sonst so einfällt) muss eben ein Verzeichnis her.

Als Blatt in disen Knoten (Verzeichnissen und Unterverzeichnissen) stehen dann eine oder mehrere Dateien als Blätter. In den Blattdateien liegen dann Listen, die z.B. sortiert abgepeichert werden so wie im ersten Fall durchdacht.

NUn könnte jemand auf die Idee kommen, dass man diese gesamte Struktur wieder in eine Datei packt, um Dateihandles zu sparen (man spart während der Laufzeit aber nicht wirklich welche, bestenfalls 2). Für den geordneten Zugriff benötigt man spätestens jetzt ein Zugriffssystem, also ein DBMS. Bis eben konnte man die Arbeit noch bei ausreichender Disziplin mit einem passenden Texteditor erledigen.

Ich hoffe, dass Dir diese kleine philosophische bzw. rückblickende Betrachtung einige Anregungen gegeben hat, wie man Daten sortiert verwalten könnte...

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de