スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

付録H.2 空白変換関数

空白変換関数とは,文字列中の半角空白を全角空白に,又は全角空白を半角空白に変換する関数です。文字列データをデータベースに格納しなくても(空白変換レベルを指定してデータベースに格納してなくても),変換結果が分かるので,次のような場合に使用すると有効です。

空白変換関数を使用する場合の前提条件
表分割ハッシュ関数と同じです。詳細については,「付録H.1(1) 表分割ハッシュ関数を使用する場合の前提条件」を参照してください。

空白変換関数を使用したUAPの作成,実行
表分割ハッシュ関数と同じです。詳細については,「付録H.1(2) 表分割ハッシュ関数を使用したUAPの作成,実行」を参照してください。
<この項の構成>
(1) 空白変換関数の詳細

(1) 空白変換関数の詳細

(a) 記述構成

記述構成については,「付録H.1(3)(b) 記述構成」を参照してください。

(b) 空白変換関数(p_rdb_conv_space

機能
指定した変換種別に従って,次のように空白変換をします。
半角空白→全角空白の場合:
文字列中の半角空白2バイトを全角空白1文字に変換します。
全角空白→半角空白の場合:
文字列中の全角空白1文字を半角空白2バイトに変換します。
 
srcpが示す文字列中の空白文字に対して変換処理をします。変換結果はdestpに格納されます。
引数stype,flagsの組み合わせと変換内容を次に示します。
stype(データ型) flags(変換種別)
半角空白→全角空白 全角空白→半角空白
NCHAR 先頭から2バイトずつチェックをして,半角空白が二つ連続であった場合,全角空白に変換します。
この場合,半角空白が1文字だけある場合は変換しません。
先頭から2バイトずつチェックをして,全角空白があった場合に半角空白に変換します。
NVARCHAR
MCHAR エラーになります。 先頭から文字コードを意識してチェックし,全角空白があった場合に半角空白に変換します。
MVARCHAR

注※ 引数ncspaceで指定した値を全角空白の文字コードとして扱います。


ヘッダファイル
#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に指定する全角空白文字については,表H-4を参照してください。
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)
データ型不正

注意事項
  1. 全角空白→半角空白の空白変換は,OSが提供する母国語サポート機能(NLS)を使用して実現しています。したがって,空白変換関数を呼び出す前に,setlocale関数でLC_CTYPEカテゴリ,又はLC_ALLカテゴリに適切なロケールを設定しておく必要があります。また,WindowsのUAP,文字コード種別がSJISのLinuxのUAP,又は文字コード種別がCHINESEのUAPの場合は,空白変換関数を呼び出す前に,p_rdb_set_lang関数を呼び出す必要があります。p_rdb_set_lang関数については,「付録H.4 文字コード種別設定関数」を参照してください。
    引数srcpが示す文字列の文字コード種別と,setlocale関数又はp_rdb_set_lang関数で指定したロケールが矛盾する場合,動作の保証はされません。
  2. データの入力領域と出力領域が同一の場合,又は出力領域が入力領域の前にあり,出力領域の後半部と入力領域の前半部が重複している場合は,動作は保証されます。
  3. 文字列の長さに関するエラーチェックはしないので,srclには妥当な値を設定しておく必要があります。
  4. 半角空白の文字コードは0x20,全角空白の文字コードは引数ncspaceに設定した文字コードを使用します。
  5. 入力に設定できるデータ型は,NCHAR,NVARCHAR,MCHAR,及びMVARCHARです。
  6. 可変長文字列の場合は,変換する文字列の長さとしてsrclを参照します。また,srclには実長部を除いた長さを指定してください。
  7. 可変長文字列の実長部は,空白変換後でも変わりません。
  8. 文字コード種別がUnicodeの場合,この関数の動作は保証されません。文字コード種別がUnicodeの場合はp_rdb_conv_space_utf8を使用してください。p_rdb_conv_space_utf8については,「(c) 空白変換関数(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

注※ 0xE38080を全角空白の文字コードとして扱います。


ヘッダファイル
#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)
データ型不正

注意事項
  1. この関数は,Unicode(UTF-8)専用の空白変換関数です。
  2. この関数を呼び出す前に,必ず引数langにUTF8を設定してp_rdb_set_lang関数を呼び出してください。p_rdb_set_lang関数については,「付録H.4 文字コード種別設定関数」を参照してください。
  3. データの入力領域と出力領域が同一の場合,又は出力領域が入力領域の前にあり,出力領域の後半部と入力領域の前半部が重複している場合は,動作が保証されます。
  4. 文字列の長さに関するエラーチェックはされないため,srclには妥当な値を入れておく必要があります。
  5. 半角空白コードは0x20,全角空白コードは0xE38080を使用します。
  6. 入力に設定できるデータ型は,MCHAR及びMVARCHARです。
  7. 可変長文字列の場合,変換する文字列の長さとしてsrclを参照します。また,srclには実長部を除いた長さを指定してください。
  8. 空白変換がされると,全角空白1文字(3バイト)が半角空白2文字(2バイト)に変換されるため,変換後の文字列の長さは変換前の文字列の長さより短くなります。
  9. 可変長文字列の場合,変換後の文字列格納領域の実長部には,変換後のデータの長さが設定されます。
  10. 変換後の文字列格納領域内のデータは,destlの長さ分だけ保証されます。
  11. Unicode(UTF-8)以外の文字コードで,この関数を呼び出した場合の動作は保証されません。