日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)


目次 索引

インストールされているコードセットとロケールの数はシステムごとに異なります。システムにイントスールされているコードセット,コンバータ,ロケールについては, SYS$I18N ディレクトリ・ツリーを確認してください。

10.8 カルチャー固有の情報の取り扱い

各ロケールには,次のカルチャー情報が格納されています。

  • 日付および時刻情報
    LC_TIME カテゴリは,日付と時刻,曜日,月の名前の表記方法を定義します。

  • 数値情報
    LC_NUMERIC カテゴリは,通貨以外の数値の書式を定義します。

  • 通貨情報
    LC_MONETARY カテゴリは,通貨の書式を設定するために使用される通貨記号と規則を定義します。

  • yes と no に対応する応答
    LC_MESSAGES カテゴリは, yes/no を要求する質問に対する応答で期待される文字列を定義します。

このカルチャー情報は, nl_langinfo関数と localeconv関数を使用して部分的に取り出すことができます。 第 10.8.1 項 を参照してください。

10.8.1 ロケールからのカルチャー情報の抽出

nl_langinfo関数は,プログラムの現在のロケールから取得した情報項目を含む文字列を指すポインタを返します。ロケールから抽出できる情報は次のとおりです。

  • 日付と時刻の書式

  • ローカル言語での曜日の名前,月の名前

  • 小数点を表す文字

  • 通貨以外の数値で 3 桁ごとの区切り文字として使用される文字

  • 通貨記号

  • ロケールのコードセットの名前

  • yes/no 質問の応答に対して定義されている文字列

localeconv関数は,LC_NUMERIC カテゴリと LC_MONETARY カテゴリから数値の書式データと通貨の書式データを格納した構造体を指すポインタを返します。

10.8.2 日付と時刻の書式関数

日付および時刻情報を使用する関数は次のとおりです。

  • strftime--- 構造体に格納されている日付と時刻の値を取得し,書式を設定して出力文字列を作成します。出力文字列の書式は書式設定文字列によって制御されます。

  • strptime--- 文字列 ( char型) を日付と時刻の値に変換します。文字列の解釈方法は書式設定文字列によって定義されます。

  • wcsftime--- strftimeと同じ処理を実行しますが,ワイド文字の文字列を作成する点が異なります。



10.8.3 通貨書式設定関数

strfmon関数はロケール内の通貨情報を使用して,数値を文字列に変換します。文字列の書式は書式設定文字列によって制御されます。

10.8.4 数値の書式設定

LC_NUMERIC 内の情報はさまざまな関数で使用されます。たとえば, strtodwcstod,およびプリント関数やスキャン関数は, LC_NUMERIC カテゴリから小数点文字を判断します。

10.9 ワイド文字を取り扱うための関数

文字はコードセットに応じて,シングル・バイトまたはマルチバイトの値で表現できます。シングル・バイト文字とマルチバイト文字をどちらも同じ方法で簡単に取り扱うことができるように, HP C RTL ではワイド文字データ型 wchar_tを定義しています。このデータ型は,1 バイト,2 バイト,3 バイト,4 バイトのいずれかの値で表現される文字を格納できます。

ワイド文字をサポートするために提供される関数は次のとおりです。

  • 文字分類関数。 第 10.9.1 項 を参照。

  • 大文字/小文字変換関数。 第 10.9.2 項 を参照。

  • 入出力関数。 第 10.9.3 項 を参照。

  • マルチバイト文字からワイド文字への変換関数。 第 10.9.4 項 を参照。

  • ワイド文字からマルチバイト文字への変換関数。 第 10.9.4 項 を参照。

  • ワイド文字列操作関数。 第 10.9.5 項 を参照。

  • ワイド文字の文字列照合および比較関数。 第 10.10 節 を参照。



10.9.1 文字分類関数

ロケール内の LC_CTYPE カテゴリは,ロケールのコードセットに含まれる文字を異なるタイプ ( 英字,数字,小文字,大文字など ) に分類します。 2 組の関数があり,1 組はワイド文字用,もう 1 組はシングル・バイト文字用で,文字が特定のタイプであるかどうかを判定します。 is*関数はシングル・バイト文字を判定し, isw*関数はワイド文字を判定します。

たとえば, iswalnum関数は,ワイド文字が英字として分類されるのか,数字として分類されるのを判定します。文字がこれらのいずれかのタイプである場合は,0 以外の値を返します。分類関数の詳細については, 第 3 章 と「リファレンス・セクション」を参照してください。

10.9.2 大文字/小文字変換関数

LC_CTYPE カテゴリは,ロケールの 2 組の文字の間のマッピングを定義します。最も一般的な文字マッピングは大文字と小文字の間のマッピングです。しかし,ロケールでは大文字と小文字のマッピング以外のマッピングもサポートできます。

ロケールの LC_CTYPE カテゴリの情報に従って,ある文字を別の文字に変換するために 2 つの関数が用意されています。

  • wctrans--- 文字の間の指定されたマッピング ( ロケールにあらかじめ定義されているマッピング ) を検索します。

  • towctrans--- wctrans関数に指定されたマッピングに従って,ある文字を別の文字に変換します。

大文字と小文字の間のマッピングのために 2 つの関数が用意されています。

  • towlower--- 大文字のワイド文字を対応する小文字に変換します。

  • towupper--- 小文字のワイド文字を対応する大文字に変換します。

これらの関数の詳細については,「リファレンス・セクション」を参照してください。

10.9.3 ワイド文字の入出力のための関数

複数の入出力関数によって,ワイド文字およびワイド文字の文字列が管理されます。

読み込み関数

ワイド文字とワイド文字の文字列を読み込むための関数は, fgetwcfgetwsgetwcgetwcharです。

ワイド文字を入力ストリームに戻すための ungetwc関数も用意されています。

書き込み関数

ワイド文字およびワイド文字の文字列を書き込むための関数は, fputwcfputwsputwcputwcharです。

スキャン関数

スキャン関数はすべて,現在のロケールの LC_NUMERIC カテゴリに定義されているカルチャー固有の小数点文字を検索します。

%lc,%C,%ls,%S 変換指定子を使用すると,スキャン関数 fwscanfwscanfswscanffscanfscanfsscanfはワイド文字を読み込むことができます。

プリント関数

すべてのプリント関数は,現在のロケールの LC_NUMERIC カテゴリに定義されているデータに従って,数値の書式を設定できます。

プリント関数で使用される %lc,%C,%ls,%S 変換指定子は,ワイド文字をマルチバイト文字に変換し,変換結果の文字をプリントします。

入出力関数の詳細については, 第 2 章 を参照してください。

10.9.4 マルチバイト文字とワイド文字の変換のための関数

ワイド文字は通常,シングル・バイト文字やマルチバイト文字をアプリケーションで管理するために内部的に使用されます。しかし,テキスト・ファイルは一般にマルチバイト文字形式で格納されます。これらのファイルを処理するには,マルチバイト文字をワイド文字形式に変換する必要があります。この変換は次の関数を使用して行うことができます。

  • mbtowcmbrtowcbtowc--- 1 文字のマルチバイト文字をワイド文字に変換します。

  • mbsrtowcsmbstowcs--- マルチバイト文字の文字列をワイド文字の文字列に変換します。

同様に,次の関数はワイド文字を対応するマルチバイト文字に変換します。

  • wcrtombwctombwctob--- 1 文字のワイド文字をマルチバイト文字に変換します。

  • wcsrtombswcstombs--- ワイド文字の文字列をマルチバイト文字の文字列に変換します。

これらの変換関数に関連して, mblen関数と mbrlen関数はマルチバイト文字のサイズを判断するために使用されます。

複数のワイド文字関数は,「 mbstate_tを指すポインタ」型の引数を受け付けます。ただし, mbstate_tは状態依存コードセットの変換状態を保持するために使用される opaque データ型です ( FILEfpos_tなど)。

10.9.5 ワイド文字の文字列および配列を操作するための関数

HP C RTL には,ワイド文字の文字列を操作する関数 ( wcs* 関数と wmem* 関数) があります。たとえば, wcscat関数は, strcat関数が char 型の文字列に対して動作する方法と同じ方法で,ワイド文字の文字列を別の文字列の末尾に追加します。

文字列操作関数の詳細については, 第 3 章 を参照してください。

10.10 照合関数

国際化環境では,文字列比較関数はマルチパス照合ができなければなりません。照合する場合は次の要件を満たす必要があります。

  • アクセント付き文字の並べ替えができること。

  • 文字シーケンスを 1 文字として照合することができること。たとえば,スペイン語の ch は c と d の間の照合順序として判定されなければなりません。

  • 1 文字を 2 文字シーケンスとして照合することができること。

  • 一部の文字を無視することができること。

照合順序情報はロケールの LC_COLLATE カテゴリに格納されています。 HP C RTL には,この照合順序情報を使用して 2 つの文字列を比較するために, strcoll関数と wcscoll関数が用意されています。

strcollまたは wcscollによるマルチパス照合は, strcmp関数や wcscmp関数を使用するより速度が遅くなる可能性があります。プログラムで strcollまたは wcscollを使用して多くの文字列の比較を行う必要がある場合は, strxfrmまたは wcsxfrm関数を使用して文字列をいったん変換した後, strcmp関数や wcscmp関数を使用すると,処理速度を向上できます。

照合順序という用語は,文字の相対的な順序のことを示します。照合順序はロケール固有であり,一部の文字は無視されることがあります。たとえば,米語の辞書では単語の間のハイフンは無視され, take-out という用語は takeofftakeover の間にリストされます。

一方,比較という用語は,文字が同じであるのか,異なるのかを調べることを意味します。たとえば, takeouttake-out は照合順序が同じであっても,異なる単語です。

アプリケーションで単語のリストをソートした後,バイナリ検索を実行して単語を迅速に検索できるようにする場合について考えてみましょう。 strcmp関数を使用すると, take-intake-outtake-up はテーブルの 1 つの部分にまとめられます。 strcollを使用し,ハイフンを無視するロケールを使用すると, take-outtakeoff および takeover と同じグループにまとめられますが,takeout と重複すると解釈されます。バイナリ検索で takeouttake-out の複製として検索されるのを回避するには,アプリケーションでバイナリ・ツリーを作成するために strcollではなく, strcmpを使用する必要があります。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.