m2pc (v1.22) コード変換プログラム
1999.4.1 永井 元久

[機能説明]

 メインフレームで作成されたEBCDICコードとJIS漢字コード(またはEUC漢字コード)の混在する固定長ファイル(例えば,メインフレームからバイナリイモードで転送したファイルなど)を入力し,文字コードを変換し,パソコン上でテキストファイルとして扱えるようにレコードの終端にCR,LFを附加して出力します。
 EBCDICコード(英小文字用,カタカナ用のどちらでも可)をJIS8単位コードに変換します。
 JIS漢字コードをシフトJISコードまたはEUC漢字コードに変換します。
 EUC漢字コードをシフトJISコードに変換します。
 おまけとして,パック形式のデータをASCII規格のパック形式,アンパック(ゾーン)形式,数字文字列のいずれかに変換します。
 変換したいレコードと変換したくないレコードが混在している場合,変換したいレコードを指定できます。(例えば,マルチレコードレイアウトのファイルを,それぞれのレイアウト毎に変換した後,それらをマージすることによって処理できます。)
 アルファベットの大文字-->小文字,小文字-->大文字の変換ができます。

[使用法]

 このプログラムは,WindowsのDOS窓で,次のようにコマンドラインを入力することによって動きます。

  c:\Windows> m2pc -ic:\work\banana -oa:\ukiki.txt -psiji.txt

 m2pc はこのプログラムの名前です。
 -i に続いて入力ファイル名を指定します。(上記の例はフルパスを指定していますが,必要なければファイル名だけでもかまいません。これは以下の2つの引数についても同様です。)
 -o に続いて出力ファイル名を指定します。
 -p に続いて変換指示データ(この後に説明があります。)を記述したテキストファイルの名前を指定します。

 つまりこの例においては,m2pc はcドライブのworkディレクトリィにあるbananaを入力し,cドライブのWindowsディレクトリィにあるsiji.txtに記述された内容に従い文字コードを変換し,aドライブにukiki.txtの名前で変換後のファイルを作成します。

 変換が終わると,入力レコード件数と出力レコード件数が表示されます。

[変換指示データの記述方法]

 1行目に,入力レコードの長さをバイト数で書きます。この値は1から5000までの範囲内にある必要があります。5000バイトを超えるレコード長のファイルは処理できません。
 2行目に,出力レコードの終端に附加する制御コードの種類を書きます。"CR,LF","CR","LF"の3種類のうち一つを選択してください。
 3行目に,変換したいレコードと変換したくないレコードが混在している場合,変換したいレコードを選択するための文字列を,その先頭位置,終端位置,文字列の16進表現の順に書きます。必要ない場合は省略可能です。指定した場合,変換しないレコードは出力されません。
 4行目に,アルファベットの大文字と小文字を変換したい場合,大文字-->小文字は"convert=uppercase-into-lowercase",小文字-->大文字は"convert=lowercase-into-uppercase"を書きます。必要ない場合は省略可能です。
 5行目(上記の3行目,4行目を省略したときは,3行目または4行目)以降から最終行まで,変換開始位置,終了位置,変換前のコード体系を表す記号,変換後のコード体系を表す記号を書きます。
 コード体系を表す記号は次表のとおりです。

変換前のコード体系
コード体系記号
EBCDIC(英小文字)コード表の体系
EBCDIC(カナ)コード表の体系
EBCDIC(ASCII)コード表の体系
EBCDIC(カナ)−英小文字等追加版−コード表の体系
JIS漢字コードの体系
EUC漢字コードの体系
ebc
ebck
ebca
ebck
jisk
euck
EBCDIC規格のパック形式pac

変換後のコード体系
コード体系記号
JIS8単位コード表の体系
シフトJISコードの体系
EUCの体系
jis
sjis
euc
ASCII規格のパック形式
ASCII規格のアンパック形式
JIS8単位コードの数字文字列
pac
zone
string


 記述例を示すと,次のようになります。

length=150
code=CR,LF
select=1,2,f1f0
convert=uppercase-into-lowercase
1,26,ebc,jis
27,46,jisk,sjis
47,47,ebc,jis
68,97,ebc,jis
98,100,jisk,sjis
101,104,pac,pac
105,108,pac,zone
109,112,pac,string
113,116,pac,string,2
117,150,ebc,jis

 この例では,入力ファイルの長さは150バイトです。
 出力レコードの終端に附加する制御コードは,CR,LFです。
 レコードの1バイト目から2バイト目までが,16進表現で"f1f0"であるレコードを変換の対象にします。
 アルファベットの大文字を小文字に変換します。
 1バイト目から26バイト目までの文字を,ebcdicコード(英小文字用)からJIS8単位コードに変換します。
 27バイト目から46バイト目までの文字を,JIS漢字コードからシフトJISコードに変換します。
 47バイト目の文字を,ebcdicコード(英小文字用)からJIS8単位コードに変換します。
 68バイト目から97バイト目までの文字を,ebcdicコード(英小文字用)からJIS8単位コードに変換します。
 98バイト目から100バイト目までの文字を,JIS漢字コードからシフトJISコードに変換します。
 48バイト目から67バイト目までは変換指示がないので,コード変換を行わずに入力した内容をそのまま出力レコードに転記します。
 101バイト目から104バイト目までのパック形式のデータを,ASCII規格のパック形式に変換します。
 105バイト目から108バイト目までのパック形式のデータを,アンパック形式の数値に変換します。変換された結果の長さは,"変換範囲のバイト数×2−1"になります。
 109バイト目から112バイト目までのパック形式のデータを,JIS8単位コードの数字文字列に変換します。例えば,変換前が"0001456c"(16進)であれば,変換後は"00001456"(数字文字列)に,"0001456d"(16進)であれば,変換後は"-0001456"(数字文字列)に変換します。変換された結果の長さは,"変換範囲のバイト数×2"になります。
 113バイト目から116バイト目までのパック形式のデータを,JIS8単位コードの数字文字列に変換します。変換内容は109バイト目から112バイト目までと同様ですが,さらに,変換した数字文字列の右端から数えて2バイト目の左に仮想小数点があるものとして,"00001456"は"000014.56"に,"-0001456"は"-00014.56"に変換します。変換された結果の長さは,"変換範囲のバイト数×2+1"になります。仮想小数点の位置は数字文字列の左端の文字の右側までを指定できます。
 なお,パック形式を変換する場合,変換前の内容が空白であったときは,変換後の形式ごとに定められた変換結果の長さ分のJIS8単位コードの空白に変換します。
 パック形式の符号桁はプラスをc(16進),マイナスをd(16進)で表しますが,f(16進)の場合もプラスとみなしています。
 符号桁を持たないパック形式("123456"(10進)は"123456"(16進),"256"(10進)は"000256"(16進)のように表す形式)を変換する場合は,変換後のコード体系をstringにすれば変換できます。(この場合は,pacやzoneでは正常に動作しません。)
 117バイト目から150バイト目までの文字を,ebcdicコード(英小文字用)からJIS8単位コードに変換します。

[このプログラムが扱うEBCDICコード表とJISコード表]

  ◆EBCDIC(英小文字)コード表
  ◆EBCDIC(カナ)コード表
  ◆EBCDIC(ASCII)コード表
  ◆EBCDIC(カナ)−英小文字等追加版−コード表
  ◆JIS8単位コード表

[動作環境]

 Windows95/98/NT4.0で動作確認しました。MS-Windowsなら何でも動くカモ。

[インストールの方法]

 ダウンロードしたm2pcc123.lzhを解凍してください。
 m2pc.exe,siji.txt,m2pc.c,*.htmが出てきます。
 m2pc.exeはプログラム,siji.txtは変換指示データファイルの見本,*.htmは使用方法の説明です。適当なフォルダに入れてお使いください。
 m2pc.cはC言語で書かれたソースコードです。日本語はシフトJIS,改行コードはCR,LFになっています。Windows以外のOSで使われる方は,お手持ちのコンパイラでコンパイルしてください。コンパイル時に警告などが出て気になる場合は,適当に直していただいて結構です。

[アンインストールの方法]

 m2pc.exe,siji.txt,m2pc.c,*.htmを削除してください。

[その他の注意事項]

 このプログラムの使用によって損害が生じても、作者は一切責任を負いません。
 このプログラムはフリーソフトウェアです。コピー・配布・転載などは自由にしていただいて構いませんが、当ホームページからダウンロードした状態(圧縮した状態)のままでお願いします。

[サポート]

 不具合がありましたら、下記アドレスまでメールでご一報ください。
 E-mail: qb6m-ngi@asahi-net.or.jp

[履歴]

 ◆アルファベットの"大文字<-->小文字"変換機能を追加しました。2000.10.10
 ◆変換対象のレコードを指定する(select=を指定する)場合,レコードを選択するための文字列が2バイト以上のとき正常に動作しない不具合を修正しました。2000.8.28
 ◆符号桁のないパック形式に対応しました。2000.7.31
 ◆複数のレコード群から構成されているファイルに対応できるように,変換対象にするレコードを指定する機能を追加しました。2000.2.11
 ◆パック形式のデータを,ASCII規格のパック形式,アンパック(ゾーン)形式,数字文字列のいずれかに変換する機能を追加しました。1999.12.23
 ◆EUC漢字コードをシフトJISコードに変換する機能を,追加しました。1999.9.29
 ◆変換するファイルに内部十進形式(パック形式)の項目があると,以降の項目がすべてnullになる不具合を修正しました。1999.8.25

トップページに戻る