SAK 図書館
VB テクニック編27 - EBCDIC・JEF ←→ CSV S-JIS コードコンバート
■SAK 関数利用規程
・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
・著作権明示部分の改編は認めない。
・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
プログラムを開発することは自由です。
・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
その他有償プロダクトとして配布・販売するには、私の許可が必要です。
(無償のフリーソフトウェアなら、自由に配布しても良い。)
・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
賠償しません。
■CSV S-JIS → EBCDIC・JEF コンバート(エクスポート)
・最新の JEF 変換テーブルがまだ検証中のため、
公開しているのは JEF の拡張漢字あたりの変換で少し問題が発生するかも
しれません。これは、同じ漢字が年度版の関係で、二つのコードを持って
いるためです。
・日本語 JEF コードは、FUJITSU の汎用機やオフコンが使用しているコード
形態です。FUJITSU M(FSP)、GS(XSP)、K(CSP/F5)、GP(ASP/FX) 関係は問題
なく変換できるはずです。
IBM AS/400 等では日本語部分は正常に変換できないと思います。
EBCDIC 部分は、メーカーが違っても、恐らく変換できると思います。
【モジュール】
・sak3.dll
・所在: http://sak.cool.coocan.jp/w_sak3/soft/public/sak3sft.htm
・お手数ですが、「sak3.dll (S-JIS → EBCDIC 変換バグ修正版)」による、
sak3.dll の c:\sak3\ へのアップデートを必ず、実施して下さい。
旧版には、S-JIS → EBCDIC、n 形式変換バグがあります。
【機能】
・CSV ファイルレコードセットを fds の項目バイト指定に従って、オフコン
コードの JEF 固定長 SF ファイルに出力します。
CSV に見出しレコードがあってはなりません。
・レコード区切り、項目見出しは出力されません。
【特別仕様】
・項目中の文字を誤作動防止のため、特殊変換しているものがあります。
「,」 →「 」 (半角カンマを半角空白)
「'」 →「 」 (半角シングルコーテーションを半角空白)
「”」→「’」 (全角ダブルコーテーションを全角シングルコーテーション)
【関数仕様】
ct = CSVtoJEF(csv, fnm, fds, add)
| | | | |_ 追加出力(boolean)
| | | | TRUE = 追加
| | | | FALSE = 上書き
| | | |_ フォーマット定義(string)
| | |_ 出力ファイル名(string)
| |_ 入力ファイル名(string)
|_ 処理件数(long)
-1 = エラー
【fds 規約】
fds = "n0_0009 ss_0020 dzr0006..."
|||| |_ 項目間に半角 1 個のスペース
||||_ 0001 〜 9999 までのバイト数 (漢字は 2 と数える)
|||_ _ = n、p は右寄せ、その他は左寄せ
|| l = 必ず左寄せで出力
|| r = 必ず右寄せで出力
||_ 0 〜 9 = 少数桁 (n、p のときだけ有効)
| s = 出力バイトに足りないとき、空白埋め
| z = 出力バイトに足りないとき、ゼロ埋め
|_ n = 外部 10 進数値タイプ
p = 内部 10 進数値タイプ (COMP-3)
s = 文字タイプ (全角半角混在タイプ含む)
k = 漢字タイプ (全角のみ、半角は全角に変換)
d = 日付タイプ
t = 時間タイプ
f = フォーマットタイプ
** 指定バイト数より、RDB 項目の方が長いと指定寄せに従ってカットされ
ます。逆に短いと指定文字が埋められます。
この機能を上手に使用すると日付 8 桁と 6 桁の変換や新コード体系と
の変換を行うことができます。
** サインは、オフコンの形式に従って付加されます。
** p タイプで指定する桁長は、COMP-3 最大桁を指定します。
S9(7)V9(2) → p2_0009 (バイト数には内部で変換される。)
** s タイプ中の全角文字の両端には、漢字シフトコードが付加されます。
k タイプには、漢字シフトコードは付加されません。
【使用例】
・CSV ファイルから、JEF ファイルにデータをコンバート出力する。
・csv、fnm は目的に合わせて修正すること。
Private Sub Command1_Click()
dim s3 as variant
dim csv as string
dim fnm as string
dim fds as string
dim ct as long
set s3 = CreateObject("sak3.Sak3Cls")
csv = "g:\tmp\test.csv"
fnm = "g:\tmp\test.sf"
fds = "ss_0010 ss_0018 n0_0009 ss_0004 ss_0016 dzr0006 tz_0006"
ct = s3.CSVtoJEF(csv, fnm, fds, false)
If ct = -1 Then
MsgBox "ファイル変換に失敗しました。"
Exit Sub
End If
MsgBox "ファイル変換終了しました。"
set s3 = Nothing
End Sub
■EBCDIC・JEF → CSV S-JIS コンバート(インポート)
・最新の JEF 変換テーブルがまだ検証中のため、
公開しているのは JEF の拡張漢字あたりの変換で少し問題が発生するかも
しれません。
【モジュール】
・sak3.dll
・所在: http://sak.cool.coocan.jp/w_sak3/soft/public/sak3sft.htm
・お手数ですが、「sak3.dll (S-JIS → EBCDIC 変換バグ修正版)」による、
sak3.dll の c:\sak3\ へのアップデートを必ず、実施して下さい。
旧版には、S-JIS → EBCDIC、n 形式変換バグがあります。
【機能】
・オフコンコードの JEF 固定長 SF ファイルから、CSV ファイルにレコード
変換出力します。固定長 SF の項目バイトは fds で指定します。
・項目見出しは出力されません。
【特別仕様】
・項目中の文字を誤作動防止のため、特殊変換しているものがあります。
「,」 →「 」 (半角カンマを半角空白)
「'」 →「 」 (半角シングルコーテーションを半角空白)
「”」→「’」 (全角ダブルコーテーションを全角シングルコーテーション)
【関数仕様】
ct = JEFtoCSV(fnm, csv, fds, bln, add)
| | | | | |_ 追加出力(boolean)
| | | | | TRUE = 追加
| | | | | FALSE = 上書き
| | | | |_ レコード長(long)
| | | | 1 〜 9999 = レコード長
| | | |_ フォーマット定義(string)
| | |_ 出力ファイル名(string)
| |_ 入力ファイル名(string)
|_ 処理件数(long)
-1 = エラー
【fds 規約】
fds = "n0_0009 ss_0020 dtr0006..."
|||| |_ 項目間に半角 1 個のスペース
||||_ 0001 〜 9999 までのバイト数 (漢字は 2 と数える)
|||_ _ = n、p は右寄せ、その他は左寄せ
|| l = 必ず左寄せでセット
|| r = 必ず右寄せでセット
||_ 0 〜 9 = 少数桁 (n、p のときだけ有効)
| 少数桁以外は、先頭と合わせてタイプ識別となる
|_ n = 外部 10 進数値タイプ
p = 内部 10 進数値タイプ (COMP-3)
ks = 漢字タイプ (全角のみ、漢字シフトコードなし項目)
ss = 文字タイプ (空白埋め)
ls = 文字タイプ (空白埋め、大文字は小文字に変換)
hs = 文字タイプ (空白埋め、半角変換可能なものは半角に変換)
sz = 文字タイプ (ゼロ埋め)
dt = 日付タイプ (西暦 4 桁タイプ)
d2 = 日付タイプ (西暦 2 桁タイプ)
md = 月日タイプ
tm = 時間タイプ
ms = 時分タイプ
jc = 受注番号フォーマットタイプ
** サイン、小数点は、オフコンの形式より変換します。
** p タイプで指定する桁長は、COMP-3 最大桁を指定します。
S9(7)V9(2) → p2_0009 (バイト数には内部で変換される。)
** k タイプ以外の文字タイプは、漢字シフトコード付きの半角全角混在タ
イプとしてコード変換します。
【使用例】
・JEF ファイルから、CSV ファイルにデータをコンバート出力する。
・fnm、csv は目的に合わせて修正すること。
Private Sub Command1_Click()
dim s3 as variant
dim csv as string
dim fnm as string
dim fds as string
dim bln as integer
dim ct as long
set s3 = CreateObject("sak3.Sak3Cls")
fnm = "g:\tmp\test.sf"
csv = "g:\tmp\test2.csv"
fds = "ss_0010 ss_0018 n0_0009 ss_0004 ss_0016 d2_0006 tm_0006"
bln = 92
ct = s3.JEFtoCSV(fnm, csv, fds, bln, False)
If ct = -1 Then
MsgBox "ファイル変換に失敗しました。"
Exit Sub
End If
MsgBox "ファイル変換終了しました。"
set s3 = Nothing
End Sub
■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料