オフコンからデータを取り出すには?移行の前の固定長・パック10進・外字の変換と検算
オフコンからデータを移行のために取り出すには、固定長のレイアウト表、数字の形式(ゾーン10進・パック10進)、外字の対応表の3つをそろえます。3つがあれば、項目を切り出してCSVに直し、件数と合計金額で検算できます。合成した1,200件の固定長ファイルで読み方を4通り誤ってみると、どの誤りも件数・合計金額・外字の残りのどれかに表れました。(2026年10月時点)
全体の流れと費用はAccess・オフコンの引越しのページにまとめています。
要点
- オフコンのデータは、固定長のレイアウト表・数字の形式・外字の対応表の3つがそろえば取り出せます。
- 合成した1,200件の固定長ファイルでは、符号Dを読み落とすと件数は合ったまま合計金額が82,270,768円ずれました。
- 富士通の日本語処理JEFの外字の領域は80A1〜A0FEで、マスの数を計算すると3,102あります。
- 変換したら、件数・合計金額・数量×単価・外字の残りの4つを、オフコンの集計表と突き合わせます。
目次
オフコンからデータを取り出すには、何をそろえればよいですか?
固定長のレイアウト表、数字の形式(ゾーン10進とパック10進の別)、外字の対応表の3つです。3つがそろえば、ファイルを項目ごとに切り出して、CSV(UTF-8)に直せます。Access・オフコンの引越しを手伝うとき、Access引越しでは最初にこの3つがあるかを確かめます。
Impressの報道(2025年3月21日)によると、報道の対象の富士通系のASP型オフコンサービスは2031年3月末で提供を終えます。発表の原文は確かめられていません。保守の終わりを案内された会社は、プログラムより先にデータを取り出せるかを確かめると、計画を立てやすくなります。
3つのどれが欠けても、取り出したデータは使えません。
| そろえるもの | 中身 | 欠けると起きること |
|---|---|---|
| 固定長のレイアウト表 | 項目の位置・長さ・形式、1レコードの長さ | 項目の境目がずれ、ほぼ全件が読めない |
| 数字の形式 | ゾーン10進かパック10進か、符号と小数点の位置 | 金額が読めないか、返品のマイナスが消える |
| 外字の対応表 | 外字のコードと、置き換える文字 | 社名や人名が〓や別の字になる |
固定長のレイアウト表は、どこにありますか?
多くはオフコンの中のプログラムにあります。COBOLのCOPY句(項目の並びを書いた部品)やファイルの定義、紙の仕様書がレイアウト表の元になります。公開されているオフコンの移行サービスの例(2025年3月の報道)でも、移す対象にCOPY句やデータベースが挙がっています。
固定長のファイルには、カンマや改行がありません。1レコードが54バイトなら先頭から54バイトずつ切り、さらに「0〜6バイト目が伝票番号」のように項目へ分けます。境目を1バイトでも誤ると、後ろの項目がすべてずれます。
私が取り出すときは、まずファイルの大きさをレコード長で割ります。割り切れなければ、レイアウト表が古いか、改行や見出しの行が入っているかのどれかです。
ゾーン10進とパック10進は、どう読み分けますか?
ゾーン10進は1バイトに1桁、パック10進は1バイトに2桁を詰める形式です。レイアウト表やCOPY句にPACKED-DECIMAL(パック10進)の指定があるかで見分けます。
IBMのCOBOLの資料では、パック10進の符号は最後の半バイトに入り、正はC、負はDで作られます(符号なしはF)。ゾーン10進は、最後のバイトの上半分が符号です。「−12,345」をパック10進で書くと「12 34 5D」の3バイトです。ゾーン10進では「F1 F2 F3 F4 D5」の5バイトになります。
パック10進を文字として読むと、「12 34 5D」は制御文字と「4」「]」になり、数字には戻りません。Pythonでは、半バイトずつ取り出してつなげば読めます。
def unpack(b):
nib = [v for x in b for v in (x >> 4, x & 0xF)]
*digits, sign = nib
n = int("".join(map(str, digits)))
return -n if sign in (0xB, 0xD) else n
unpack(bytes.fromhex("12345D")) # -12345
小数点の位置はファイルの中に入っていません。単価が「円」か「銭」までかは、レイアウト表の桁の指定で確かめます。
外字は、どう変換すればよいですか?
外字のコードと置き換える文字を1対1で並べた対応表を作り、変換のときに置き換えます。外字は会社ごとに作った文字なので、どの会社にも使える変換表はありません。
法務省の資料によると、富士通が開発した日本語処理の仕組みJEFでは、利用者定義文字(外字)の領域は80A1〜A0FEです。マスの数を計算すると3,102あり、どこに何の字を入れたかは会社ごとに違います。WindowsのShift_JIS(cp932)にも外字の領域があります。Pythonで確かめると、0xF040〜0xF9FCはUnicodeの私用領域の1,880字に対応します。
対応表は次の順に作ります。
- ファイル全体から外字の領域のコードを拾い、使われているコードと回数の一覧を作る。
- 一覧のコードを、オフコンの画面や帳票で1字ずつ見て、置き換える字を決める。
- Unicodeにある字はその字に、ない字は近い字か「〓」にして、置き換えた数を記録に残す。
合成したファイルでは、対応表に1字を載せ忘れたため、正しく読んでも154字が〓のまま残りました。〓の数を数えておけば、載せ忘れに気づけます。
変換したデータが正しいかは、どう確かめますか?
件数、合計金額、「数量×単価=金額」の行の数、外字の残りの4つを、オフコンの集計表と突き合わせます。Access引越しで1,200件の固定長ファイルを合成しました(架空のデータ、返品53件)。読み方を4通り誤ってみると、どの誤りも4つのどれかに表れました。
- 符号Dを読み落とすと、件数は1,200件で合ったまま、合計金額が82,270,768円多くなりました。
- レコード長を55バイトと1バイト誤ると、読めた行は22件で、1,156件が読めませんでした。
- パック10進を文字として読むと、1,200件すべてが数字に戻りませんでした。
- 外字の対応表を使わないと、件数と合計は合っても、598字が〓のまま残りました。
見落としやすいのは符号の誤りです。件数も行の形も正しく見えるので、合計金額を突き合わせないと気づけません。私は、合計をプラスの行とマイナスの行に分けて比べます。
合成したファイルは、文字の項目をcp932で書いた簡略版です。実機のJEFやEBCDIC系の文字の表とは違うため、実物では文字の変換をその機種の表に合わせます。スクリプトはscripts/figs/offcon_extract.pyで、同じ結果を再現できます。
このサイトで相談するには?
Access引越しでは、オフコンのデータの取り出しから、移した先で同じ帳票を出すところまでを一緒に進めます。何をどう頼むか決まっていなくても大丈夫で、準備は要りません。御社のやり方に合わせて、進め方を一緒に考えます。無料で相談する
よくある質問
- オフコンの出力ツールでCSVにできれば、変換は要りませんか?
- 要らない場合もあります。ただし、ツールがパック10進の符号と外字をどう扱うかを確かめ、件数と合計金額で検算してから使います。
- レイアウト表が見つからないと、データは取り出せませんか?
- いいえ。COBOLのCOPY句やファイルの定義から作り直せることがあります。ファイルの大きさがレコード長で割り切れるかが、最初の手がかりです。
- 外字は、何字くらいあるものですか?
- 会社ごとに違います。JEFの外字の領域のマスは計算で3,102ありますが、使われているのは一部です。ファイルから数えて確かめます。
- 変換のプログラムは、自社で書けますか?
- はい。レイアウト表がそろっていれば、Pythonの標準の機能だけで書けます。検算の4項目を集計表と突き合わせるところまで行ってください。
この数字の出し方
この記事の自前の数字は、次の見本・条件・回数で出しました。主宰が確かめ、更新日は2026年10月17日です。スクリプトの名前から、同じ手順を自分のファイルで再現できます。
- Access引越しの実験(2026年10月16日、合成した固定長54バイト×1,200件。読み方を4通り誤って、件数と合計金額を比べた)。scripts/figs/offcon_extract.py
出典
- Impress クラウド Watch(2025年3月21日)の報道(2026年10月16日確認)
- IT Leaders「富士通、オフコンのモダナイゼーションサービスを体系化、オフコン運用支援は2030年度に終了」(2025年3月24日)(販売は2025年度、提供は2030年度=2031年3月末までで終了)(2026年10月16日確認)
- IBM Documentation「Sign representation of zoned and packed-decimal data」(COBOL for AIX 5.1)(2026年10月16日確認)
- IBM Documentation「Packed-Decimal Format」(IBM i 7.3)(2026年10月16日確認)
- 法務省「現行システムにおける外字運用」(登記情報システムのJEFコード体系、PDF 2003年8月作成)(2026年10月16日確認)
- Python 標準ライブラリ codecs(標準エンコーディング cp932)(2026年10月16日確認)