Packen von alphanumerischen Feldern in Cobol

Hallo,
ich bekomme Informationen aus China. Normalerweise sind die Informationen gepackt. Der Lieferant entpackt die Felder und ich muss sie wieder packen,um damit arbeiten zu können.
Es geht hier um den Chinesischen Characterset GB2312, den ich nach Unicode konvertieren möchte.

Beispiel: D3C4 wird angeliefert

DC
34

soll daraus werden. Mit C ist das kein Problem. Ich scheue mich aber, ein Unterprogramm in C oder Java zu integrieren.
Es gibt in Cobol auch Befehle, die mit Bits arbeiten, leider nicht im Enterprise Cobol auf dem Mainframe.
Hat jemand eine Idee ?

Dank und viele Grüße
Horst

Ich bin zwar schon seit 6.5 Jahren in Rente und habe nahezu alles vergessen.
Frage: Ist D3C4 einer Zeichenkette (PIC X(4) oder der hexadezimale Inhalt von 2 Bytes (PIC 9(4) COMP) ?

Hi,
es geht hier um ein Feld mit chinesischem Encoding das man entpackt hat.
Es ist PIC X(4) und ich brauche es in 9(4) comp bzw. binary.

Grüße
Horst

Ich bin zwar schon seit 6.5 Jahren in Rente und habe nahezu
alles vergessen.
Frage: Ist D3C4 einer Zeichenkette (PIC X(4) oder der
hexadezimale Inhalt von 2 Bytes (PIC 9(4) COMP) ?

Hallo Horst,

ich bin zwar jetzt schon eine Weile aus der reinen Programmierung raus, aber eigentlich sollte das doch ganz einfach sein.

Ich würde eine interne Tabelle (im Cobol-Programm) anlegen mit der Kodierung für Europäische Zeichen und eine für die passenden Chinesischen. Ich weis allerdings nicht wie viele das sein könnten, bestimmt ein paar mehr oder? Ich kenne mich da nicht so gut aus.

Auf jeden Fall könntest Du die Umschlüsselung über diese zwei internen Tabellen im Cobol-Programm in einer kleinen Routine erledigen. Sollte auch schnell gehen.

Auch die Befehle TRANSFORM bzw. INSPECT können dabei hilfreich sein. Kann man aber auch mit den Tabellen „zu Fuß“ machen auf die alte Art.

Auf Biteben kann man auch in Cobol arbeiten. Dazu kann man z.B. in der Working Storage Variablen als HEX definieren. Ein gutes Cobol Handbuch zum passenden Compiler gibt Dir die nötigen Hinweise.

Ich hoffe ich habe Dir ein wenig helfen können und Dein Problem richtig erkannt, ansonsten frage mich einfach noch mal.

Der Z.

Hi, vielen Dank fuer Deine Hilfe. Es gibt schon Möglichkeiten. Interne Tabelle ist eine davon. Leider gibt es tausende von chinesischen Zeichen.Ich suche natuerlich auch nach einer eleganten Lösung. Vielleicht kommt man rechnerisch daran.

Viele Grüße und vielen Dank
Horst

Hallo Horst,
wie du ganz richtig festgestellt hast, hat Cobol keine Befehle für die Bit Manipulation.
Ein kleiner Trick hilft weiter: man lege zwei Integer Felder (COMP ?) speichermäßig hintereinander - ob sie während der Laufzeit hintereinander liegen, kann man im Compilerlisting sehen - leere den oberen Bereich mit Low-Value und multipliziere den unteren Wert mit zwei. Da Cobol nicht überprüft, ob ein Speicherüberlauf stattfindet - bei Cobol 85 auf dem IBM Mainframe war das auf jedenfall so - wird durch die Multiplikation das oberste Bit der ‚unteren‘ Variable auf das unterste Bit der ‚oberen‘ Variable geschoben.
Auf diese Art und Weise hab ich vor etlichen Jahren für einen Kunden die Routinen für ein plattformübergreifendes Datenaustauschformat umgesetzt.
Allerdings habe ich mir damals die entsprechende Logik erstmal mit Rexx abgebildet und mir damit auch ein Testdatengenerator geschrieben und erst dann diese Logik mit Cobol nachgebildet.
MfG
Roger

Hallo Roger,
das hört sich gut an. Ich probiere es aus.
Vielen Dank für Deine Hilfe.

schöne Grüße
Horst

Hallo,

sorry da kann ich leider auch nicht weiterhelfen.

Gruss
Yvonne

Hallo Horst
Leider kann ich hier auch nicht wetierhelfen. Ich bin seit drei Jahren nur noch auf Oracle Datenbanken in PL/SQL tätig. Wünsche dennoch viel Erfolg mit Deinen chinesischen Kunden.
Gruss Klaus

Danke Klaus,
ich habe es mir einfach gemacht. Ich habe byte 1 mit 16 multipliziert und zum Ergebnis Byte 2 addiert. Im Grunde ist das ja auch eine Bit Verschiebung.
Hiermit ist es dokumentiert, falls jemand so was benötigt.

Viele Grüße
Horst