ページの先頭行へ戻る
Interstage Charset ManagerStandard Edition V9 使用手引書 拡張データ変換機能編
FUJITSU Software

2.3.1 wconv_open

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型については、“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 ()で取得します。

【エラーコード】

EINVAL:

以下のどれかの状態です。

  • パラメタが不当です。

  • 指定された変換元コード系、または変換先コード系は、サポートしていません。

  • 指定された変換元コード系と変換先コード系の組み合わせは、サポートしていません。

ENOMEM:

メモリ不足が発生しました。

ENODATA:

文字コード変換テーブルが異常です。

【エラー原因】

EFAULT:

パラメタのアドレスが不正です。

ENOTSUP:

以下のどれかの状態です。

  • 指定された変換元データ型と変換先データ型の組み合わせは、サポートしていません。

  • 変換元項目数と変換先項目数が異なっています。

  • 指定されたデータ型では、指定された項目のサイズ、またはデータ長をサポートしていません。

  • 指定された変換元コード系、または変換先コード系はサポートしていません。

  • 指定された変換元コード系と変換先コード系の組み合わせは、サポートしていません。

E2BIG:

変換先項目のサイズが不足しています。

ENOENT:

文字コード変換テーブルファイルは使用中です。または、文字コード変換テーブルファイルが存在しません。

EBADF:

文字コード変換テーブルファイルが異常です。

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