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 );