努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:code:other-050

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
documents:code:other-050 [2024/11/02 01:16] k896951documents:code:other-050 [2026/05/12 23:14] (現在) k896951
行 1: 行 1:
 +====== 002.ゾーン形式、パック形式 ======
 +
 +2024-10-10\\ ホストのファイル処理でLOW-VALUE,HIGH-VALUEの話が出て混乱する人が出てたので、自分用にもメモを作る
 +
 +===== 概要 =====
 +
 +ゾーン形式(Zone),パックドデシマル形式(Packed Decimal)をざっくりいうと
 +
 +  * ゾーン形式は数値の1桁を1バイトで表す
 +  * パックドデシマル形式は数値の桁を 数字2桁もしくは数字1桁+符号情報 で区切り1バイトで表す
 +  * どちらの形式も、0x00で埋めたものがLOW-VALUE、0xFFで埋めたものがHIGH-VALUE
 +  * メインフレーム(ホスト)のCOBOL等で生成する数値の形式
 +
 +==== 文字,文字列 ====
 +
 +COBOLで言う PIC X(n). 
 +
 +{{:documents:other:pasted:20241011-030728.png?nolink}}
 +
 +
 +LOW-VALUE, HIGH-VALUEを設定した場合
 +
 +{{:documents:other:pasted:20241011-031804.png?nolink}}
 +
 +==== 数値:Zone ====
 +
 +COBOLで言う PIC S9(n). \\ 符号が無ければ PIC 9(n). も同じです。
 +
 +{{:documents:other:pasted:20241011-030902.png?nolink}}
 +
 +LOW-VALUE, HIGH-VALUEを設定した場合
 +
 +{{:documents:other:pasted:20241011-032201.png?nolink}}
 +
 +数字1桁が1バイトに対応し、負の数でなければ数字の文字コードそのままに格納されます。\\ 
 +負の数の場合は一番下の桁のバイトに有符号を意味する文字に置換えされます。EBCDICだと見た目上位4ビットが変換されていてわかりやすいですが、ASCIIの場合はEBCDICの文字に対応したASCIIの文字を割り当てるため分かり辛くなります。\\ 
 +ASCII(2)のパターンはOracleのバルクローダーやGnuCOBOLで使用されていたパターンです。
 +
 +
 +^  数字  ^  EBCDIC            |^  ASCII            |^  ASCII(2)            ||
 +| :::  ^  正の数      負の数      正の数    ^  負の数      正の数        負の数     ^
 +|  0    0xF0    |  0xD0 }  |  0x30    0x7D }  |  0x30      |  0x70 p  |
 +|  1    0xF1    |  0xD1 J  |  0x31    0x4A J  |  0x31      |  0x71 q  |
 +|  2    0xF2    |  0xD2 K  |  0x32    0x4B K  |  0x32      |  0x72 r  |
 +|  3    0xF3    |  0xD3 L  |  0x33    0x4C L  |  0x33      |  0x73 s  |
 +|  4    0xF4    |  0xD4 M  |  0x34    0x4D M  |  0x34      |  0x74 t  |
 +|  5    0xF5    |  0xD5 N  |  0x35    0x4E N  |  0x35      |  0x75 u  |
 +|  6    0xF8    |  0xD6 O  |  0x36    0x4F O  |  0x36      |  0x76 v  |
 +|  7    0xF7    |  0xD7 P  |  0x37    0x50 P  |  0x37      |  0x77 w  |
 +|  8    0xF8    |  0xD8 Q  |  0x38    0x51 Q  |  0x38      |  0x78 x  |
 +|  9    0xF9    |  0xD9 R  |  0x39    0x52 R  |  0x39      |  0x79 y  |
 +
 +ホストの環境によっては
 +  * 符号が一番上の桁のバイトに割り当てられる
 +  * 正の数を意味する符号が割り当てられる
 +場合もあります。\\ ゼロも表現が様々あるので、サンプル出力するなどして確認が必要です。
 +
 +==== 数値:Packed Decimal ====
 +
 +COBOLで言う PIC S9(n) COMP-3.\\ 
 +数字2桁、最後のバイトは数字1桁+符号情報1桁、を1バイトで表現します。桁数+符号情報が偶数にならない場合は先頭桁にゼロの桁を追加します。\\ なので、PIC S9(5) COMP-3.とPIC S9(4) COMP-3.は同じバイト形状になります。
 +
 +※PIC 9(n) COMP-3. は多分正の数の値のみのS9(n) COMP-3.と同じだと思うけど確認はしてない。
 +
 +{{:documents:other:pasted:20241011-032842.png?nolink}}
 +
 +LOW-VALUE, HIGH-VALUEを設定した場合
 +
 +{{:documents:other:pasted:20241011-032641.png?nolink}}
 +
 +Zone形式と同様にPacked Decimalでも符号情報が先頭に付く場合やゼロの符号の話などもあると思うので、サンプル出力するなどして確認が必要です。
  
documents/code/other-050.txt · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki