付録H.2 空白変換関数
空白変換関数とは,文字列中の半角空白を全角空白に,又は全角空白を半角空白に変換する関数です。文字列データをデータベースに格納しなくても(空白変換レベルを指定してデータベースに格納してなくても),変換結果が分かるので,次のような場合に使用すると有効です。
-
表をキーレンジ分割するための分割キーを決定するときに,格納するデータが均等に分割されるかどうかを評価する場合
-
データベース作成ユティリティで,キーレンジ分割した表へRDエリア単位に並列にデータロードする場合,RDエリアごとに入力データファイルを作成する場合
- 空白変換関数を使用する場合の前提条件
-
表分割ハッシュ関数と同じです。詳細については,「表分割ハッシュ関数を使用する場合の前提条件」を参照してください。
- 空白変換関数を使用したUAPの作成,実行
-
表分割ハッシュ関数と同じです。詳細については,「表分割ハッシュ関数を使用したUAPの作成,実行」を参照してください。
- 〈この項の構成〉
(1) 空白変換関数の詳細
(a) 記述構成
記述構成については,「記述構成」を参照してください。
(b) 空白変換関数(p_rdb_conv_space)
- 機能
-
指定した変換種別に従って,次のように空白変換をします。
- 半角空白→全角空白の場合:
-
文字列中の半角空白2バイトを全角空白1文字に変換します。
- 全角空白→半角空白の場合:
-
文字列中の全角空白1文字を半角空白2バイトに変換します。
srcpが示す文字列中の空白文字に対して変換処理をします。変換結果はdestpに格納されます。
引数stype,flagsの組み合わせと変換内容を次に示します。
stype(データ型)
flags(変換種別)
半角空白→全角空白
全角空白→半角空白
NCHAR
先頭から2バイトずつチェックをして,半角空白が二つ連続であった場合,全角空白※に変換します。
この場合,半角空白が1文字だけある場合は変換しません。
先頭から2バイトずつチェックをして,全角空白※があった場合に半角空白に変換します。
NVARCHAR
MCHAR
エラーになります。
先頭から文字コードを意識してチェックし,全角空白※があった場合に半角空白に変換します。
MVARCHAR
- ヘッダファイル
-
- #include<pdauxcnv.h>
-
空白変換機能を使用する場合に必ず指定します。
- #include<pdbsqlda.h>
-
データ型コードを設定する場合,マクロ(PDSQL_で始まる名称のマクロ)を使用するときに指定します。ディクショナリ表からデータ型コードを検索して設定する場合には必要ありません。
- 形式
int p_rdb_conv_space(char *srcp, unsigned char stype, unsigned int srcl, char *destp, unsigned char ncspace[2], int flags);
- 引数
-
- srcp(入力)
-
文字列格納領域の先頭アドレスを指定します。
- stype(入力)
-
変換前のデータ型を指定します。指定できるデータ型を次に示します。
マクロ名
データ型
PDSQL_NCHAR
NCHAR
PDSQL_NVARCHAR
NVARCHAR
PDSQL_MCHAR
MCHAR
PDSQL_MVARCHAR
MVARCHAR
- srcl(入力)
-
srcpで指定した文字列の長さを指定します。可変長文字列の場合は,実際にsrcpが示す領域に格納されている文字列の長さ(単位:バイト)を指定します。
- destp(出力)
-
変換後の文字列格納領域の先頭アドレスが設定されます。destpが示す領域は空白変換関数の呼び出し側で確保してください。
- ncspace(入力)
-
HiRDBサーバで使用する各国文字コードの全角空白文字を,2バイトの領域で指定します。ncspaceに指定する全角空白文字については,表「ncspaceに指定する全角空白文字」を参照してください。
- flags(入力)
-
変換種別を指定します。変換種別を次に示します。
マクロ名
変換種別
p_rdb_HALF_TO_FULL_SPACE
半角空白→全角空白
p_rdb_FULL_TO_HALF_SPACE
全角空白→半角空白
- 戻り値
-
データ型:int
- p_rdb_RC_RTRN(0)
-
正常終了
- p_rdb_RC_ERRINVF(-8)
-
flags引数不正
- p_rdb_RC_ERRTYPC(-9)
-
データ型不正
- 注意事項
-
注意事項を次に示します。
-
全角空白→半角空白の空白変換は,OSが提供する母国語サポート機能(NLS)を使用して実現しています。したがって,空白変換関数を呼び出す前に,setlocale関数でLC_CTYPEカテゴリ,又はLC_ALLカテゴリに適切なロケールを設定しておく必要があります。また,WindowsのUAP,文字コード種別がSJISのLinuxのUAP,又は文字コード種別がCHINESEのUAPの場合は,空白変換関数を呼び出す前に,p_rdb_set_lang関数を呼び出す必要があります。p_rdb_set_lang関数については,「文字コード種別設定関数」を参照してください。
引数srcpが示す文字列の文字コード種別と,setlocale関数又はp_rdb_set_lang関数で指定したロケールが矛盾する場合,動作の保証はされません。
-
データの入力領域と出力領域が同一の場合,又は出力領域が入力領域の前にあり,出力領域の後半部と入力領域の前半部が重複している場合は,動作は保証されます。
-
文字列の長さに関するエラーチェックはしないので,srclには妥当な値を設定しておく必要があります。
-
半角空白の文字コードは0x20,全角空白の文字コードは引数ncspaceに設定した文字コードを使用します。
-
入力に設定できるデータ型は,NCHAR,NVARCHAR,MCHAR,及びMVARCHARです。
-
可変長文字列の場合は,変換する文字列の長さとしてsrclを参照します。また,srclには実長部を除いた長さを指定してください。
-
可変長文字列の実長部は,空白変換後でも変わりません。
-
文字コード種別がUnicodeの場合,この関数の動作は保証されません。文字コード種別がUnicodeの場合はp_rdb_conv_space_utf8を使用してください。p_rdb_conv_space_utf8については,「空白変換関数(p_rdb_conv_space_utf8)」を参照してください。
-
(c) 空白変換関数(p_rdb_conv_space_utf8)
- 機能
-
文字コードがUnicode(UTF-8)の場合に,全角空白を半角空白に変換する関数です。文字列中の全角空白1文字を半角空白2文字に変換します。
srcpが示す文字列中の空白文字に対して変換処理をします。変換結果はdestpに格納され,変換後の文字列の長さがdestlに格納されます。
引数stype,flagsの組み合わせと変換内容を次に示します。
stype(データ型)
flags(変換種別)
半角空白→全角空白
全角空白→半角空白
MCHAR
エラーになります。
先頭から文字コードを意識してチェックし,全角空白※があった場合に半角空白に変換します。
MVARCHAR
- ヘッダファイル
-
- #include <pdauxcnv.h>
-
空白変換関数を使用する場合に必ず指定する。
- #include <pdbsqlda.h>
-
データ型コードを設定する場合,マクロ(PDSQL_で始まるマクロ)を使用して設定するときに指定します。ディクショナリ表からデータ型コードを検索して設定する場合には必要ありません。
- 形式
int p_rdb_conv_space_utf8(char *srcp, unsigned char stype, unsigned int srcl, char *destp, unsigned int *destl, int flags) ;
- 引数
-
- srcp(入力)
-
文字列格納領域の先頭アドレスを指定します。
- stype(入力)
-
変換前のデータ型を指定します。指定できるデータ型を次に示します。
マクロ名
データ型
PDSQL_MCHAR
MCHAR
PDSQL_MVARCHAR
MVARCHAR
- srcl(入力)
-
srcpで指定した文字列の長さを指定します。可変長文字列の場合は,実際にsrcpが示す領域に格納されている文字列の長さ(単位:バイト)を指定します。
- destp(出力)
-
変換後の文字列格納領域の先頭アドレスが設定されます。destpが示す領域は空白変換関数の呼び出し側で確保してください。
- destl(出力)
-
destpで指定した文字列の長さが設定されます。可変長文字列の場合は,実際にdestpが示す領域に格納されている文字列の長さ(単位:バイト)が設定されます。
- flags(入力)
-
変換種別を指定します。変換種別を次に示します。
マクロ名
変換種別
p_rdb_FULL_TO_HALF_SPACE
全角空白→半角空白
- 戻り値
-
データ型:int
- p_rdb_RC_RTRN(0)
-
正常終了
- p_rdb_RC_ERRINVF(-8)
-
flags引数不正
- p_rdb_RC_ERRTYPC(-9)
-
データ型不正
- 注意事項
-
-
この関数は,Unicode(UTF-8)専用の空白変換関数です。
-
この関数を呼び出す前に,必ず引数langにUTF8を設定してp_rdb_set_lang関数を呼び出してください。p_rdb_set_lang関数については,「文字コード種別設定関数」を参照してください。
-
データの入力領域と出力領域が同一の場合,又は出力領域が入力領域の前にあり,出力領域の後半部と入力領域の前半部が重複している場合は,動作が保証されます。
-
文字列の長さに関するエラーチェックはされないため,srclには妥当な値を入れておく必要があります。
-
半角空白コードは0x20,全角空白コードは0xE38080を使用します。
-
入力に設定できるデータ型は,MCHAR及びMVARCHARです。
-
可変長文字列の場合,変換する文字列の長さとしてsrclを参照します。また,srclには実長部を除いた長さを指定してください。
-
空白変換がされると,全角空白1文字(3バイト)が半角空白2文字(2バイト)に変換されるため,変換後の文字列の長さは変換前の文字列の長さより短くなります。
-
可変長文字列の場合,変換後の文字列格納領域の実長部には,変換後のデータの長さが設定されます。
-
変換後の文字列格納領域内のデータは,destlの長さ分だけ保証されます。
-
Unicode(UTF-8)以外の文字コードで,この関数を呼び出した場合の動作は保証されません。
-