File of SmallInt

Zurück zur Übersicht

 

Eigentlich hat es so angefangen:

In der Zeit, als ich vorrangig mit TurboPascal und später mit Delphi arbeitete, gab es ein paar kleine Projekte, bei denen Datenbestände als File of Integer mitspielten. Integer war früher mal eine Ganzzahl, die 2 Byte zur Verfügung hatte. Als dann das 32-Bit Delphi rauskam (also ab Version 2), war Integer = 4 Byte. Wer weiter mit 2 Byte - Zahlen arbeiten wollte, der nannte diese nun SmallInt. Und genau solche Files möchte ich nun auch in Python verwenden und zwar möglichst einfach.

Da Files bei Python auf Stringbasis organisiert sind, habe ich eine kleine Klasse geschrieben, die das so umwandelt, dass ich es als Python - Nutzer praktisch nicht störend bemerke. Die Files liegen dann so auf dem Speichermedium, dass sie mit anderen Programmiersprachen/-Systemen wie gewohnt gelesen, bearbeitet und erneut pythonlesbar geschrieben werden können.

Man kann Zahlen natürlich auch als Strings abspeichern. Aber auf die hier beschriebene Art sind diese kompakter und leichter zu handeln (nämlich als Direktzugriffsdatei), da die Zahlen alle die gleiche Länge haben. Hier das Listing dieses Moduls, wie es in seiner Urform zuerst bei mir entstand. 


Nachdem ich es hier in's Web gestellt hatte, meldete sich bald Klaus Baldermann zu Wort und zeigte mir eine wesentliche Verbesserung meines Ansatzes. Er schrieb hierzu:

" ... die Sache mit dem File of Integer ist eigentlich eine prima Beispiel für das Standardmodul struct - ich habe mal das Turbopascal rausgekramt und probiert. Herausgekommen ist das beiliegende Python-Modul. Das ist eine etwas allgemeinere Fassung Deines fileint.py. Der Hauptunterschied ist natürlich, daß struct.pack/unpack statt divmod etc. benutzt wird. (nicht ausprobiert, aber gehen müßten auch ShortInt "b", Byte "B", Word "H" und LongInt "l")

Eventuell sollte man da weiter auf Einzelheiten wie byte-order eingehen, aber zum Zeigen, was man mit diesem Modul anfangen kann, dürfte das erstmal reichen :-)

Nebenbei wird noch ein kleiner Dos/Windows-Fallstrick entschärft: Wie Du ja schon in Archiv/tips.html ansprichst, sind Zeilenenden unter Dos/Windows anders als auf anderen Systemen. Daher kann man Dateien wahlweise im Text (Default) oder Binary-Modus öffnen. Der Unterschied würde bei fileint.py bei Zahlen wie
2573 (#13#10) oder 3338 (#10#13) bemerkbar, wo ein \r oder \n vorkommt...,"

" ... habe auch die Testdaten für die Fließkommazahlen manipuliert, so daß keine Fehlermeldungen ausgeworfen werden :-) ... "

Dieses Modul ist hier zu sehen.

An dieser Stelle nochmals herzlichen Dank für diese Hilfe!