日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


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


前へ 次へ 目次 索引





strfmon

金額値を文字列に変換します。変換は書式文字列によって制御されます。



形式

#include <monetary.h>

ssize_t strfmon (char *s, size_t maxsize, const char *format, ...);




引数



s

結果として得られる文字列へのポインタ。

maxsize

結果として得られる文字列に格納される最大バイト数。

format

出力文字列の書式を制御する文字列へのポインタ。

...

出力文字列へと整形される double型の金額値。 format がポイントする書式文字列の中の変換指定と同じ数の値がなくてはなりません。値が足りなかった場合,関数は実行に失敗します。余分な引数は無視されます。



説明

strfmon関数は,指定された金額値を使用して, s がポイントする文字列を作成します。最高 maxsize バイトが s にコピーされます。

format がポイントする書式文字列は,通常の文字と変換指定から構成されています。すべての通常の文字は,変更なしに出力文字列にコピーされます。変換指定は,指定された金額値の 1 つが,出力文字列でどのように整形されるかを定義します。

変換指定は,パーセント文字 (%),いくつかのオプションの文字 ( 表 REF-5 を参照 ),および変換指定子 ( 表 REF-6 を参照 ) から構成されます。

表 REF-5 に示しているオプション文字が変換指定に含まれる場合,それらの文字は表に示した順序で現れなくてはなりません。

表 REF-5 strfmon の変換指定に含まれるオプションの文字
文字 意味
= character 小数点以上の桁数を指定した場合に, character を数値フィル文字として使用する。デフォルトの数値フィル文字はスペース文字である。フィル文字は,有効桁数と幅のカウントに対応できるように, 1 バイトとして表現できなくてはならない。この変換指定子は,小数点以上の桁数が指定されなかった場合には無視される。また,幅のフィルはつねにスペース文字を使用するので,この変換指定子の影響を受けない。
^ 数値の書式指定に区切り文字を使用しない。デフォルトでは,桁は現在のロケールの LC_MONETARY カテゴリの mon_grouping フィールドに従ってグループ化される。
+ 現在のロケールの positive_sign または negative_sign フィールドで指定された文字列を追加する。 p_sign_posn または n_sign_posn が 0 に設定されている場合,デフォルトでは負の値を示すために括弧が使用される。それ以外の場合には,符号文字列が値の符号を示すために使用される。同じ変換指定で + と ( を同時に使用することはできない。
( 負の値を括弧で囲む。デフォルトの設定には,現在のロケールの p_sign_posn または n_sign_posn フィールドが使用される。 p_sign_posn または n_sign_posn が 0 に設定されている場合,デフォルトでは負の値を示すために括弧が使用される。それ以外の場合には,符号文字列が値の符号を示すために使用される。同じ変換指定で + と ( を同時に使用することはできない。
! 通貨シンボルを抑止する。デフォルトでは,通貨シンボルが追加される。
-- フィールド内で値を左揃えにする。デフォルトでは,値は右揃えになる。
フィールド幅 変換の結果の位置を揃えるときに使用される最小のフィールド幅を指定する 10 進整数。デフォルトのフィールド幅は,結果を格納できる最も小さいフィールドである。
#left_precision # の後の 10 進整数は,小数点以上の桁数を指定する。余った桁はフィル文字によって埋められる。デフォルトでは,引数に必要な最小限の桁数が使用される。 ^ 変換指定子でグループ化が抑止されておらず,現在のロケールでグループ化が定義されていた場合には,フィル文字が追加される前にグループ化の区切り文字が挿入される。グループ化の区切り文字は,フィル文字が数字として定義されている場合でも,フィル文字には適用されない。
.right_precision ピリオド (.) の後の 10 進整数は,小数点以下の桁数を指定する。余分な桁はゼロで埋められる。値はこの小数点以下の桁数にまで丸められる。小数点以下の桁数がゼロである場合,出力には小数点は含められない。デフォルトでは,小数点以下の桁数は現在のロケールの frac_digits または int_frac_digits フィールドによって定義される。

表 REF-6 strfmon の変換指定子
指定子 意味
i 通貨シンボルが抑止されていなければ,現在のロケールの int_currency_symbol フィールドによって定義されている国際通貨シンボルを使用する。
n 通貨シンボルが抑止されていなければ,現在のロケールの currency_symbol フィールドによって定義されているローカル通貨シンボルを使用する。
% % 文字を出力する。変換指定は %% でなくてはならない。この指定子では,どのオプション文字も使用できない。




戻り値

x s がポイントする文字列に書き込まれるバイト数。終端の null 文字は含みません。
-1    エラーを示します。関数は errno を以下のいずれかの値に設定します。

  • EINVAL---変換指定の構文が間違っている。

  • E2BIG---書式文字列全体を処理すると,出力が maxsize バイトを超える。





#include <stdlib.h> 
#include <stdio.h> 
#include <locale.h> 
#include <monetary.h> 
#include <errno.h> 
 
#define MAX_BUF_SIZE 124 
 
main() 
{ 
  size_t ret; 
  char buffer[MAX_BUF_SIZE]; 
  double amount = 102593421; 
 
 /* Display a monetary amount using the en_US.ISO8859-1 */ 
 /* locale and a range of different display formats.    */ 
 
  if (setlocale(LC_ALL, "en_US.ISO8859-1") == (char *) NULL) { 
      perror("setlocale"); 
      exit(EXIT_FAILURE); 
  } 
  ret = strfmon(buffer, MAX_BUF_SIZE, "International: %i\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %n\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %=*#10n\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:     %(n\n", -1 * amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %^!n\n", amount); 
  printf(buffer); 
} 

この例のプログラムを実行すると,次の出力が生成されます。


International: USD 102,593,421.00 
National:      $102,593,421.00 
National:      $**102,593,421.00 
National:      ($102,593,421.00) 
National:      102593421.00 




strftime

tm構造体に格納されている日付および時刻情報を使って出力文字列を作成します。出力文字列の書式は書式文字列によって制御されます。



形式

#include <time.h>

size_t strftime (char *s, size_t maxsize, const char *format, const struct tm *timeptr);

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS Version 7.0 およびそれ以前の動作と等価な, strftime関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。


引数



s

結果として得られる文字列へのポインタ。

maxsize

結果として得られる文字列に格納される最大バイト数 ( 終端の null を含みます )。

format

出力文字列の書式を制御する文字列へのポインタ。

timeptr

ローカル時刻 ( tm) 構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されています。



説明

strftime関数は,timeptr がポイントする構造体に含まれているデータを使用して,s がポイントする文字列を作成します。最高 maxsize バイトが s にコピーされます。

書式文字列は,0 個以上の変換指定と通常の文字から構成されています。すべての通常の文字は ( 終端の null 文字を含めて ),変更なしに出力文字列にコピーされます。変換指定は, tm構造体の中のデータが,出力文字列でどのように整形されるかを定義します。

変換指定は,パーセント文字 (%), 1 つまたは複数のオプションの文字 ( 表 REF-7 を参照 ),および変換指定子 ( 表 REF-8 を参照) から構成されます。 表 REF-7 に示しているオプション文字が指定される場合,それらの文字は表に示した順序で現れなくてはなりません。

strftime関数は, tzsetを呼び出した場合と同じように動作します。

表 REF-7 strftime 変換指定のオプション要素
要素 意味
-- フィールド幅にオプションとして付け,そのフィールドが左揃えされ,スペースでパディングされることを示す。0 要素と同時に使用することはできない。
0 フィールド幅にオプションとして付け,そのフィールドが右揃えされ,ゼロでパディングされることを示す。 -- 要素と同時に使用することはできない。
フィールド幅 最大フィールド幅を指定する 10 進整数。
.precision フィールド内のデータの精度を指定する 10 進整数。

d, H, I, j, m, M, o, S, U, w, W, y, および Y 変換指定子では,精度指定子は,フィールド内の桁数の最小値である。変換指定が精度によって指定された桁数よりも少ない場合には,先頭にゼロが追加される。

a, A, b, B, c, D, E, h, n, N, p, r, t, T, x, X, Z, および % 変換指定子では,精度指定子は,フィールド内の文字数の最大値である。変換指定が精度によって指定された桁数よりも多くの文字を含んでいる場合には,右側の文字が切り捨てられる。

d, H, I, m, M, o, S, U, w, W, y および Y 変換指定子のデフォルトの精度は 2 である。 j 変換指定子のデフォルトの精度は 3 である。

表 REF-7 の変換指定のリストは, XPG4 仕様の拡張であることに注意してください。

表 REF-8 は変換指定子を示しています。 strftime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。たとえば, %Bが指定されている場合,関数は LC_TIME の mon フィールドにアクセスして, tm構造体で指定された月の完全な名前を取得します。無効な変換指定子を使用したときの結果は未定義です。

表 REF-8 strftime の変換指定子
指定子 置き換え
a ロケールの短縮された曜日名。
A ロケールの完全な曜日名。
b ロケールの短縮された月の名前。
B ロケールの完全な月の名前。
c ロケールの適切な日付および時刻表現。
C 10 進数 (00〜99) として表現される世紀 (年を 100 で割り,整数に切り捨て)。
d その月の 10 進数 (01〜31) として表現される日付。
D %m/%d/%y と同じ。
e 先頭がスペース文字でフィルされた 2 桁のフィールドに格納される,その月の 10 進数 (1〜31) として表現される日付。
Ec ロケールの代替日付および時刻表現。
EC ロケールの代替表現における基本年 (期間) の名前。
Ex ロケールの代替日付表現。
EX ロケールの代替時刻表現。
Ey ロケールの代替表現における基本年 ( %EC ) からのオフセット。
EY ロケールの完全な代替年表現。
h %b と同じ。
H 10 進数 (00〜23) としての時刻 (24 時間制)。
I 10 進数 (01〜12) としての時刻 (12 時間制)。
j 10 進数 (001〜366) としての,その年の中での日。
m 10 進数 (01〜12) としての月。
M 10 進数 (00〜59) としての分。
n 改行文字。
Od ロケールの代替数値シンボルを使用した,その月の中での日。
Oe ロケールの代替数値シンボルを使用した,その月の中での日付。
OH ロケールの代替数値シンボルを使用した時刻 (24 時間制)。
OI ロケールの代替数値シンボルを使用した時刻 (12 時間制)。
Om ロケールの代替数値シンボルを使用した月。
OM ロケールの代替数値シンボルを使用した分。
OS ロケールの代替数値シンボルを使用した秒。
Ou ロケールの代替表現での曜日を数値で表したもの (月曜日 =1)。
OU ロケールの代替数値シンボルを使用した,その年の中での週 (週は日曜日から始まる)。
OV ロケールの代替数値シンボルを使用した,10 進数 (01〜53) としての,その年の中での週 (週は月曜日から始まる)。1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでない場合は,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。
Ow ロケールの代替数値シンボルを使用した,数値としての曜日 (日曜日 =0)。
OW ロケールの代替数値シンボルを使用した,その年の中での数値としての週 (週は月曜日から始まる)。
Oy ロケールの代替数値シンボルを使用した,世紀を除いた年。
p ロケールの 12 時間制における AM/PM 指定。
r AM/PM 表記での時刻。
R 24 時間表記での時刻 ( %H:%M )。
S 10 進数 (00〜61) としての秒。
t タブ文字。
T 時刻 ( %H:%M:%S )。
u 1〜7 の範囲の 10 進数としての曜日 (月曜日 =1)。
U 10 進数 (00〜53) としての,その年の中の週 (最初の日曜日が 1 番目の週の最初の日と見なされる)。
V 10 進数 (00〜53) としての,その年の中の週 (週は月曜日から始まる)。 1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでない場合は,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。
w 10 進数 (0 [日曜日]〜6) としての曜日。
W 10 進数 (00〜53) としての,その年の中での週 (最初の月曜日が 1 番目の週の最初の日と見なされる)。
x ロケールの適切な日付表現。
X ロケールの適切な時刻表現。
y 10 進数 (00〜99) としての,世紀を除いた年。
Y 10 進数としての,世紀を含んだ年。
Z タイム・ゾーン名またはその短縮形。タイム・ゾーン情報がない場合には,文字は出力されない。
% リテラルの % 文字。




戻り値

x s がポイントする配列に格納された文字数。終端の null 文字は含まれません。
0 エラーが発生したことを示します。配列の内容は不定です。





#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 
#include <locale.h> 
#include <errno.h> 
 
#define NUM_OF_DATES  7 
#define BUF_SIZE 256 
 
/* This program formats a number of different dates, once */ 
/* using the C locale and then using the fr_FR.ISO8859-1  */ 
/* locale. Date and time formatting is done using strftime(). */ 
 
main() 
{ 
    int count, 
        i; 
    char buffer[BUF_SIZE]; 
    struct tm *tm_ptr; 
    time_t time_list[NUM_OF_DATES] = 
    {500, 68200000, 694223999, 694224000, 
     704900000, 705000000, 705900000}; 
 
    /* Display dates using the C locale */ 
    printf("\nUsing the C locale:\n\n"); 
 
    setlocale(LC_ALL, "C"); 
 
    for (i = 0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, 
               "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
       printf(buffer); 
    } 
 
    /* Display dates using the fr_FR.ISO8859-1 locale */ 
    printf("\nUsing the fr_FR.ISO8859-1 locale:\n\n"); 
 
    setlocale(LC_ALL, "fr_FR.ISO8859-1"); 
 
    for (i = 0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, 
               "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
        printf(buffer); 
    } 
} 

この例のプログラムを実行すると,次の出力が生成されます。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡