wconv_openについて説明します。
名前
wconv_open - データ変換環境をオープンする
形式
wconv_t wconv_open( CODESET tocodeset, wconv_pr * torec, CODESET fromcodeset, wconv_pr * fromrec );
tocodeset 変換先コード系を指定します。
torec 変換先レコード書式を記述したwconv_pr型のポインタを指定します。
fromcodeset 変換元コード系を指定します。
fromrec 変換元レコード書式を記述したwconv_pr型のポインタを指定します。
機能説明
wconv_openは、fromrecで指定されたレコード書式をtorecで指定されたレコード書式に変換するための変換情報テーブルを構築し、テーブルのアドレスを返します。
wconv_tおよびCODESETは、wconv.hで定義されています。
wconv_pr型には、次の指定をします。wconv_pr型については、“2.6.1 wconv_pr(レコード書式)”を参照してください。
レコード形式に固定長形式を指定します。
項目数を指定します。
項目書式を指定します。個々の項目の書式は、wconv_pf型に指定します。
wconv_pf型には、次の指定をします。wconv_pf型については、“2.6.2 wconv_pf(項目書式)”を参照してください。
項目のデータ型を指定します。
項目のサイズには、レコードに占める項目のバイト数を指定します。
tocodesetおよびfromcodesetに指定できる値は、“2.2 文字コードの種類”を参照してください。tocodesetおよびfromcodesetに同じ文字コードの種類を指定した場合、変換元レコードの文字項目のデータを変換先レコードの文字項目へコピーします。
CSV形式/TSV形式を変換する場合は、CSV形式/TSV形式のレコード書式の項目数に1 を指定し、項目書式のデータ型にCSV形式(FLD_STRING_CSV_CR/FLD_STRING_CSV_LF/FLD_STRING_CSV_CRLF)
、またはTSV形式(FLD_STRING_TSV_CR/FLD_STRING_TSV_LF/FLD_STRING_TSV_CRLF)を指定することで変換できます。
変換対象となるレコードのレコード書式と項目書式は、他の変換の場合と同様に指定します。
戻り値
変換情報テーブルの構築に成功した場合は、その先頭アドレスを返します。
この値を、後続の関数の第一引数として引き継ぎます。
構築に失敗した場合は、NULLを返します。
エラー
エラー情報は、wconv_error ()で取得します。
【エラーコード】
以下のどれかの状態です。
パラメタが不当です。
指定された変換元コード系、または変換先コード系は、サポートしていません。
指定された変換元コード系と変換先コード系の組み合わせは、サポートしていません。
メモリ不足が発生しました。
文字コード変換テーブルが異常です。
【エラー原因】
パラメタのアドレスが不正です。
以下のどれかの状態です。
指定された変換元データ型と変換先データ型の組み合わせは、サポートしていません。
変換元項目数と変換先項目数が異なっています。
指定されたデータ型では、指定された項目のサイズ、またはデータ長をサポートしていません。
指定された変換元コード系、または変換先コード系はサポートしていません。
指定された変換元コード系と変換先コード系の組み合わせは、サポートしていません。
変換先項目のサイズが不足しています。
文字コード変換テーブルファイルは使用中です。または、文字コード変換テーブルファイルが存在しません。
文字コード変換テーブルファイルが異常です。
例
wconv_open関数の例
unsigned char fromcode[4]; /* 変換元コード */ unsigned char tocode[4]; /* 変換先コード */ wconv_t wd; /* 変換情報テーブル */ wconv_pr fromrecformat; /* 変換先レコード書式 */ wconv_pf fromfldformat; /* 変換先項目書式 */ wconv_pr torecformat; /* 変換先レコード書式 */ wconv_pf tofldformat; /* 変換先項目書式 */ wconv_vdt fromrecdata; /* 変換元レコードデータ */ wconv_vf fromflddata; /* 変換元項目データ */ wconv_vdt torecdata; /* 変換先レコードデータ */ wconv_vf toflddata; /* 変換先項目データ */ wconv_pe error; /* エラー情報 */ /* ここに初期化処理を記述 */ fromrecformat.num_fld = 1; fromrecformat.ptr_fld = &fromfldformat; fromfldformat.ty_fld = FLD_STRING; fromfldformat.sz_fld = sizeof( fromcode ); torecformat.num_fld = 1; torecformat.ptr_fld = &tofldformat; tofldformat.ty_fld = FLD_STRING; tofldformat.sz_fld = sizeof( tocode ); if ( ( wd = wconv_open( CDS_UCS2, &torecformat, CDS_SJIS, &fromrecformat ) ) == NULL ) { wconv_error( wd, 0, &error ); return error.err_code; } fromrecdata.num_varfld = 1; fromrecdata.ptr_fldvar = &fromflddata; fromrecdata.ptr_data = fromcode; fromflddata.pos_fld = 1; torecdata.num_varfld = 1; torecdata.ptr_fldvar = &toflddata; torecdata.ptr_data = tocode; toflddata.pos_fld = 1; fromcode[0] = 0x81; fromcode[1] = 0x40; fromflddata.len_fld = 2; if ( ( wconv_convert( wd, &fromrecdata, &torecdata ) ) != 0x00 ) { wconv_error( wd, 1, &error ); } wconv_close( wd );