パック 10 進数データをゾーン 10 進数または 10 進数データに変換するコードをPythonで記述する必要があります。
前もって感謝します。
パック 10 進数データをゾーン 10 進数または 10 進数データに変換するコードをPythonで記述する必要があります。
前もって感謝します。
パッケージ化されたデータをどのように保存するかによって異なりますが、COMP-3 から数値または英数字に COBOL デコーダーをコーディングするのが間違いなく最善の方法です。単純に次のようになります。
01 WS-YOUR-COMP-DATA PIC 9(xx) COMP-3.
01 WS-NUMERIC-VAR 9(xx).
...
PROCEDURE DIVISION.
* ---> here you read your data
* ---> then convert it:
MOVE WS-YOUR-COMP-DATA TO WS-NUMERIC-VAR.
* ---> and finally, you send it or write it into your dataset/queue/DB.
ただし、それができない、またはしたくない場合は、データの保存方法によって決定されるいくつかのオプションを次に示します。
import ebcdic
file = open("your-file.txt",'r')
for line in file:
#Usually the cp1141 is for Austria, Germany, Switzerland characters.
bline = line.encode('cp1141')
print(bline.hex())
file.close()
入力:
FD FILEO
RECORDING MODE IS F.
01 FILEO-REC PIC S9(10) COMP-3.
01 FILEO-REC1 PIC S9(09) COMP-3.
01 FILEO-REC2 PIC 9(09) COMP-3.
01 FILEO-REC3 PIC 9(10) COMP-3.
WORKING-STORAGE SECTION.
01 FS-FILEO PIC 9(02).
88 FS-FILEO-OK VALUE 00.
01 WS-COUNT PIC 9(02).
01 WS-I PIC 9(02).
01 WS-MY-VAR OCCURS 0 TO 10 TIMES DEPENDING ON WS-COUNT
PIC S9(10) COMP-3.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
MOVE 4 TO WS-COUNT
MOVE 0123456789 TO WS-MY-VAR(1)
MOVE 123456789 TO WS-MY-VAR(2)
MOVE ZEROES TO WS-MY-VAR(3)
MOVE -123456789 TO WS-MY-VAR(4)
*Now we test with each of the four option in every record structure.
S9(10) を使用した出力:
00123456789c
00123456789c
00000000000c
00123456789d
S9(09) での出力:
123456789c
123456789c
000000000c
123456789d
9(09) を使用した出力:
123456789f
123456789f
000000000f
123456789f
9(10) の出力:
00123456789f
00123456789f
00000000000f
00123456789f
ご覧のとおり、印刷された文字はまったく同じですが、最後に文字が追加されています。この文字は、数値が負符号の場合は「d」、正符号の場合は「c」、数値が符号なしの場合は「f」になります。これらの最後の文字は、長さが奇数の場合にのみフィラーとして表示されます。元。9(07) は奇数です。7 を 2 で割ると 3.5 になり、4 に丸められ、0.5 のスペースに文字が入ります。とにかく、私のテストでは、OpenCOBOL がこの規則に従わず、いっぱいになることがわかりました。
エンコーディング cpxxxx 値を見つけるには、この表、またはエミュレート端末または COBOL IDE (openCOBOL が右下隅に示しています) を参照してください。
bline = line.encode('cp1141')
。bline = bytes(line, 'ascii')
このGitHub リポジトリで python と COBOL の両方のプログラムを作成できます。