Skip to content

Cobol und die moderne Welt

Zufällig liefen mir heute Daten über den Weg, die aus einem in Cobol geschriebenen und zugegeben schon etwas älteren Programm stammen. Beim auseinandernehmen der Datenstrukturen stieß ich auf einen für mich ziemlich seltsam anmutenden Datentyp: comp-3.

Stell dir vor, du hast eine gegebene zahl 1234567, die du comp-3 codiert speicherst. Du gibst also 1234567 rein und kriegst hexadezimal 0x12, 0x34, 0x56, 0x7c raus.

Der Aufbau ist an sich recht leicht: Man packt jeweils eine Ziffer in ein 4-bit nybble (also ein teil-byte) und hängt ganz am Schluß noch mal in 4 bit ein "0xC" für positiv oder ein "0xD" für negativ an. Klingt logisch, nicht? Diese Komprimierung stammt noch aus der Zeit, als Speicher wirklich kostbar war, aber mußte man ausgerechnet so speicherplatz sparen?

Zum Glück gibt's heute Internet und immer ein paar Informationen zu seltsamen Datentypen im Netz zu finden ([1], [2]).

Einen schnellen Hack in Python zum Umwandeln nach Signed Integer stell ich mal rein, vielleicht brauchts irgendwann noch mal jemand:

  1. def comp3_to_signed_int(comp3):
  2.     rnum = ""
  3.  
  4.     for nybble in comp3:
  5.         inum = str(hex(ord(nybble)))
  6.         inum = inum[2:]
  7.         inum = inum.rjust(2, "0")
  8.         rnum += inum
  9.  
  10.     if rnum.endswith("d"):
  11.         rnum = rnum[:-1] * -1
  12.     else:
  13.         rnum = rnum[:-1]
  14.  
  15.     return rnum
Kategorien: Tech-O-Rama | 1 Kommentar
Abstimmungszeitraum abgelaufen.
Derzeitige Beurteilung: keine, 0 Stimme(n) 94254 Klicks

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Alexander am :

Zu den besten Zeiten von Cobol wurden Datensätze auf Lochkarten gespeichert, da war es absolut Vorrangig, daß ein Satz möglichst in eine Zeile passte. Hardware war viel teurer als Programmieraufwand. Daher tat man alles, um Daten eng zu packen.

Marco am :

deben deshalb ist es ja so seltsam, dass man so viel platz verschenkte. immerhin kriegt man in 8 bit mehr daten unter als nur 2 ziffern zwischen 0 und 9, wenn man eine bessere codierung wählt. allerdings könnte man comp3 auch auf lochkarten per hand noch gut entschlüsseln.

Frank Mattes am :

Hallo Marco,

ich bin Anwendungsprogrammierer und schreibe Software in COBOL.
Zu dem 'seltsamen' Datentyp: Comp-3 wird auch 'Packed Decimal' genannt und hat zum Teil seinen Ursprung in der Grossrechnerarchitektur.
Die Prozessoren eines Grossrechners haben ein zusätzliches Rechenwerk in der ALU, das mit gepackten Zahlen rechnen kann.
Verwendet werden solche Zahlendarstellungen vor allem in Finanzanwendungen.
Der Vorteil ist, das mit diesen Binary Coded Decimals (BCD) Zahlen mit Nachkommastellen ohne Rundungsfehler ( im gegenssatz zu Fliesskommadarstellung wie foat oder double) dargestellt werden können.
Gruß, Frank

Kommentar schreiben

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Um einen Kommentar hinterlassen zu können, erhalten Sie nach dem Kommentieren eine E-Mail mit Aktivierungslink an ihre angegebene Adresse.
BBCode-Formatierung erlaubt
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
Formular-Optionen
tweetbackcheck cronjob