Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


付録H.2 空白変換関数

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

空白変換関数を使用する場合の前提条件

表分割ハッシュ関数と同じです。詳細については,「表分割ハッシュ関数を使用する場合の前提条件」を参照してください。

空白変換関数を使用した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

注※ 引数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に指定する全角空白文字については,表「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)

データ型不正

注意事項

注意事項を次に示します。

  1. 全角空白→半角空白の空白変換は,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関数で指定したロケールが矛盾する場合,動作の保証はされません。

  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については,「空白変換関数(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関数については,「文字コード種別設定関数」を参照してください。

  3. データの入力領域と出力領域が同一の場合,又は出力領域が入力領域の前にあり,出力領域の後半部と入力領域の前半部が重複している場合は,動作が保証されます。

  4. 文字列の長さに関するエラーチェックはされないため,srclには妥当な値を入れておく必要があります。

  5. 半角空白コードは0x20,全角空白コードは0xE38080を使用します。

  6. 入力に設定できるデータ型は,MCHAR及びMVARCHARです。

  7. 可変長文字列の場合,変換する文字列の長さとしてsrclを参照します。また,srclには実長部を除いた長さを指定してください。

  8. 空白変換がされると,全角空白1文字(3バイト)が半角空白2文字(2バイト)に変換されるため,変換後の文字列の長さは変換前の文字列の長さより短くなります。

  9. 可変長文字列の場合,変換後の文字列格納領域の実長部には,変換後のデータの長さが設定されます。

  10. 変換後の文字列格納領域内のデータは,destlの長さ分だけ保証されます。

  11. Unicode(UTF-8)以外の文字コードで,この関数を呼び出した場合の動作は保証されません。