Anmelden

View Full Version : Codepage Umsetzung bei READ in Cobol



schatte
28-01-13, 10:24
Hallo Leute,

ich habe eine Datei mit einem CHAR Feld, welches mit CCSID 273 definiert ist. Der Inhalt des Felds lautet "Müller".
Mein Batchjob läuft mit CCSID 273. Nach Ausführung von READ in einem ILE Cobol Programm enthält mein Record die Hex-Werte "D4D093938599".
Wenn nun der Job beendet wird und anschließend mit Codepage 37 gestartet wird, enthält der Record (neu erneutem READ) die Hex-Werte "D4DC93938599". Korrekterweise ist das "ü" nun nach CCSID 37 konvertiert worden (D0 -> DC).

Nun möchte ich jedoch die Codepage Änderung zur Laufzeit des Jobs ausführen. Alle Programme laufen in der selben Aktivierungsgruppe:
1. Aufruf des Leseprogramms mit CCSID 273.
2. Erneuter Aufruf des Leseprogramms mit CCSID 37. -> Konvertierung läuft leider weiterhin mit CCSID 273, obwohl der Job auf 37 umgestellt wurde. Auch ein Schließen und Öffnen der entsprechenden Datei bringt keinen Erfolg.
Erst nach Verlassen der Aktvierungsgruppe und erneutem Aufruf des Leseprogramms wird die neue CCSID berücksichtigt.

Bei Verwendung von Embedded SQL wird die CCSID direkt berücksichtigt.

Gibt es eine Lösung bei direktem Cobol Zugriff? Ständiges Verlassen der Aktivierungsgruppe würde ja zur großen Performance Problemen führen.

Hat jemand eine Idee?

Gruß
Matthias

Fuerchau
28-01-13, 12:11
Da du das ja schon festgestellt hast, denke ich nicht dass es geht.
COBOL merkt sich wohl zur Initialisierung diverses Einstellungen, so dass eben die Änderung der CCSID nicht festgestellt wird.
Wie häufig ändert sich denn die CCSID?
Normalerweise bleibt die CCSID im Job ja konstant.

Wenn du aber weißt, wenn die CCSID geändert werden muss, und das nicht dauernd passiert, ist das deaktivieren der ACTGRP ggf. nicht zeitkritisch.

Vielleicht klappt ja auch ein CANCEL 'MYPGM' bei Änderung der CCSID vor dem nächsten Aufruf.

schatte
30-01-13, 18:53
Leider kann die CCSID sich ständig ändern, da es sich um einen Job handelt, der länderübergreifend Belege (z.B. Lieferscheine) erzeugt. Und um dann die länderspezifischen Zeichen im PRTF korrekt zu drucken, wird die CCSID entsprechend geändert.

Ist das Verhalten denn in RPG anders?

Gruß
Matthias

Fuerchau
01-02-13, 10:54
Ich denke da hast du den falschen Ansatz gewählt.
Was das Drucken angeht, so ist der Sprachraum hier entscheidend.
Wenn du also mit ISO-8859-1 (CCSID 273, 500, 037, usw.) druckst ist es egal mit welcher CCSID dein Job letztendlich arbeitet, da hier im Endeffekt ja in 1252 für den Drucker gewandelt wird und alles im selben Sprachraum ist.

Kritischer ist es da, wenn der Sprachraum wechselt, also von 273 nach z.B. 870 (polnisch).
Wenn die DB nämlich 273 hat, kannst du den Job nicht in 870 ändern, denn die Umsetzung führt zu Verlusten bzw. der Open schlägt bereits fehl.

Hier musst du für klare CCSID-verhältnisse zwischen DB, Job und CHRID der PRTF sorgen.