wconv_convertについて説明します。
名前
wconv_convert - レコードデータ変換を実行する
形式
int wconv_convert( wconv_t wd, const wconv_vdt * indata, wconv_vdt * outdata );
wd wconv_open、またはwconv_openExが返却した変換情報テーブルの値を指定します。
indata 変換元のレコードを格納したwconv_vdt 型のポインタを設定します。
outdata 変換先のレコードを格納したwconv_vdt 型のポインタを設定します。
機能説明
wconv_convert は、indataに格納されたレコードデータを変換情報テーブルに従って書式を変換し、outdata へ出力します。
wconv_convertでは、各項目のデータの長さを指定することができます。
データの長さは、項目変数(項目のデータ長)として指定します。
データの長さは、項目のサイズより短くしてください。
wconv_vdt 型には、次の指定をします。wconv_vdt型については、"2.6.3 wconv_vdt(レコードデータ)"を参照してください。
項目変数がある場合、項目変数を指定する項目数を指定します。
項目変数がない場合は、0 を指定します。
項目変数データを指定します。
個々の項目変数は、wconv_vf型に指定します。
項目変数がない場合は、NULLを指定します。
wconv_vf型には、次の指定をします。wconv_vf型については、"2.6.4 wconv_vf(項目変数)"を参照してください。
項目の位置(配列の要素番号。1 から配列数まで)を指定します。
項目のデータ長を指定します。
indataで項目変数が指定された項目の内容により、以下のように動作します。
文字コード項目(CSV/TSV項目を含む)の場合
入力データ長を指定できます。
また、wconv_convert終了時には、変換できなかったデータ長が出力されます。
数値データ項目の場合、かつ、項目のデータ長に“0”を指定された場合
数値データの変換を行いません。
変換先レコードの数値項目の領域には何も出力されません。ただし、入力データには、wconv_openまたはwconv_openExで指定された長さの領域があるものとして、次の文字コード項目または数値データ項目の変換を行います。
また、outdataで項目変数が指定された項目の内容により、以下のように動作します。
文字コード項目(CSV/TSV項目を含む)の場合
wconv_convert終了時に、出力されたデータ長が出力されます。
wconv_convert はindataの内容により、以下のように動作します。
文字コード項目の場合
文字コード項目で未定義文字が検出された場合
置き換え文字に変換して処理を継続します。
デフォルトの置き換え文字は、各コード系の"_"(アンダースコア)です。
ロッキングシフトコード系(注1)の文字コード項目で、データ型が1バイト/2バイト混在型の場合
項目ごとに、最初は1バイト文字状態として変換します。
前の項目の最後が1バイト状態か2バイト状態かには関係しません。
(注1)
ロッキングシフトコード系とは、JISコード系やJEFコード系のように、1バイト文字と2バイト文字の切り換え(シフト状態の切り換え)を制御コードで行うコード系のことを意味します。
変換できない項目があった場合
その項目の変換を中止し、次の項目の変換を行います。
文字コード項目の場合、該当項目の変換できる文字コードまで変換して、outdata へ出力してから次の項目を変換します。
数値データ項目の場合
変換できない項目があった場合
その項目の変換を中止し、次の項目の変換を行います。
数値データ項目の場合は、何も出力しません。
変換した結果、項目書式で指定された変換先レコードの項目のサイズが変換先データ長よりも短い場合は、データは切り落とされます。変換先レコードの項目のサイズが変換先データ長よりも長い場合で、かつ、項目変数のデータの長さに-1が指定された場合は、変換先項目のサイズを変換先データ長の長さにします。
項目変数が指定されていない場合は、残りの領域には何も出力しません。
戻り値
変換が成功した場合は、0を返却します。
変換エラーがあった場合は、エラーのあった項目数を返却します。
変換の中止が指定されていた場合、-1を返却し次の項目の変換は行いません。
その他のエラーがあった場合、-1を返却します。
エラー
エラー情報は、wconv_error ()で取得します。
【エラーコード】
変換元データ長が異常です。
メモリ不足が発生しました。
コード変換エラーが発生しました。または、未定義文字が出現時に項目の変換中止の指示があったので中止しました。
エラー時にレコードの変換中止の指示があったので処理を中止しました。
【エラー原因】
変換先レコードの項目のサイズが不足しました。
変換元データの符号または数値が不正です。または、変換元コード列に不正なコードか未定義文字が存在しました。
オーバーフローまたはアンダーフローが発生しました。
例
wconv_convert関数の例
“2.3.1 wconv_open”のwconv_open関数の例を参照してください。