ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

書式付き文字列

書式設定文字列を使用する関数

次の MATLAB® 関数は、通常のテキストと指定した書式付きのデータを含む文字列を作成します。

  • sprintf - 書式付きデータを出力文字列に書き込み

  • fprintf - 書式付きデータを出力ファイルまたはコマンド ウィンドウに書き込み

  • warning - 書式付きデータを警告メッセージとして表示

  • error - 書式付きデータをエラー メッセージとして表示し、処理を中止

  • assert - 条件に違反したときにエラーを生成

  • MException — エラー情報を取得

これらの各関数の構文は、C 言語の関数 printf で使用されるものと同様の書式設定演算子を含みます。たとえば、%s によって MATLAB では入力値が文字列として解釈され、%d は整数の書式に 10 進数表記を使用することを意味します。

これらの関数の一般的な書式設定構文は、次のようになります。

functionname(..., format_string, value1, value2, ..., valueN)

ここで、format_string 引数は最終的な出力文字列の基本的なコンテンツと書式を表し、続く value 引数におって文字列に書き込まれるデータ値が与えられます。

次に示すのは、sprintf ステートメントの例と、結果として得られるの出力文字列です。

sprintf('The price of %s on %d/%d/%d was $%.2f.', ...
        'bread', 7, 1, 2006, 2.49)
ans =
    The price of bread on 7/1/2006 was $2.49.

    メモ:   この節の例では、関数 sprintf のみを使用して文字列の書式設定について説明します。ただし、同様に関数 fprintfwarningerror を使用して例を実行することもできます。

書式設定文字列

上記の sprintf ステートメントの最初の入力引数は、format_string です。

'The price of %s on %d/%d/%d was $%.2f.'

この引数は通常のテキスト、書式演算子、さらに場合によっては、特殊文字を含むことができます。この特定の文字列に対する書式演算子は、%s%d%d%d%.2f です。

format_string 引数に続き、文字列の各書式演算子に対して 1 つずつ、5 つの入力引数を追加します。

'bread', 7, 1, 2006, 2.49

MATLAB で書式設定文字列が処理される場合には、各演算子がこれらの入力値の 1 つで置き換えられます。

特殊文字

特殊文字は、文字列内のテキストの一部です。ただし、通常のテキストとしては入力できないので、これらの文字を表すには一意の文字列が必要です。出力文字列に特殊文字を挿入するには、次の文字列を使用します。

挿入する文字. .

表記 . .

単一引用符

''

パーセント文字

%%

バックスラッシュ

\\

アラーム

\a

バックスペース

\b

フォーム フィード

\f

改行

\n

キャリッジ リターン

\r

水平タブ

\t

垂直タブ

\v

16 進数 N

\xN

8 進数、N

\N

入力値引数

次の構文において、

functionname(..., format_string, value1, value2, ..., valueN)

value 引数は、引数リストにおいて format_string の直後になければなりません。ほとんどの場合では、format_string で使用される各書式演算子に対して、これらの value 引数を 1 つ指定します。スカラー、ベクトル、数値および文字配列は、有効な値の引数です。セル配列や構造体を使用することはできません。

書式演算子の数よりも挿入する値の数が多い場合、MATLAB では余分な値に対して演算子が再使用されます。この例は、文字列に書き込む 2 つの書式演算子と 6 つの値を示します。

sprintf('%s = %d\n', 'A', 479, 'B', 352, 'C', 651)
ans =
    A = 479
    B = 352
    C = 651

複数の value 引数をベクトルまたは行列として指定することもできます。format_string では、行列またはベクトル全体に対して 1 つの %s 演算子が必要です。

mvec = [77 65 84 76 65 66];

sprintf('%s ', char(mvec))
ans =
    MATLAB 

シーケンス引数と番号付き引数の指定

value 引数は、シーケンス (つまり、文字列内の書式演算子と同じ順序) によって、あるいは、識別子 (どの value 引数で置き換えるかを識別する番号を各演算子に付ける) によって、引数リスト内に配置できます。既定では、MATLAB ではシーケンスによる順序が使用されます。

数値識別子によって引数を指定するには、演算子内で記号 %、正の整数、記号 $ による表記を使用します。番号付き引数の指定については、値識別子を参照してください。

演算子のシーケンスに従う場合識別子で順序を決める場合
sprintf('%s %s %s', ...
    '1st', '2nd', '3rd')
ans =
    1st 2nd 3rd
sprintf('%3$s %2$s %1$s', ...
    '1st', '2nd', '3rd')
ans =
     3rd 2nd 1st

書式演算子

書式演算子では、数値や文字の値の引数を書式設定する方法と、これらを文字列のどこに挿入するかを MATLAB に知らせます。これらの演算子は、出力文字列の表記、配置、有効桁数、フィールド幅、および、その他の属性をコントロールします。

書式演算子は % 文字で始まり、後に 1 つ以上の数値や、文字、記号が続き、挿入値の書式を詳細に定義する上で重要な役割を果たします。この列の最後の要素は 1 文字の "変換文字" で、MATLAB で書き込まれるデータに対する表記スタイルの定義に使用されます。MATLAB で使用される変換文字は、C 言語の関数 printf で使用される変換文字に基づいています。

同じ値に対して、5 種類の書式を示す簡単な例を示します。

A = pi*100*ones(1,5);

sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)
ans =
    314.159265       % Display in fixed-point notation (%f)
    314.16           % Display 2 decimal digits (%.2f)
    +314.16          % Display + for positive numbers (%+.2f)
          314.16     % Set width to 12 characters (%12.2f)
    000000314.16     % Replace leading spaces with 0 (%012.2f)

書式演算子の作成

次に、MATLAB の書式演算子を構成するフィールドを、演算子で右から左に現れる順序で示します。右端のフィールドにある変換文字は必須で、左側の 5 つのフィールドはオプションです。これらの各フィールドについては、次節で述べます。

  • 変換文字 - 出力の表記法を指定

  • サブタイプ - 標準以外のタイプを詳細に指定

  • 精度 - 小数点の右側に表示する桁数、または表示する有効桁数を設定

  • フィールドの幅 — 表示する最小桁数を設定

  • フラグ - 配置とパディング、および正符号と負符号の有無を指定

  • 値の識別子 - 書式演算子を値の入力引数にマップ値引数が引数リストに順番に並んでいない場合は、識別子フィールドを使用します。

6 つのフィールドすべてを使用する書式演算子の例を示します (演算子では空白文字は許可されていません。ここでは、図を理解しやすくするためにスペースを使用しています)。

引数リストの値からフィールド幅と精度フィールドの値を代入できる、代わりの構文を次に示します。この構文を使用する場合と方法については、書式設定文字列外でのフィールド幅と精度の指定の節を参照してください (ここでも、図をわかりやすくするために空白文字を使用しています)。

書式演算子の各フィールドについては、次節で述べます。右から左へ順番に、Conversion Character フィールドから、Identifier フィールドまでの書式演算子の各フィールドを説明します。

変換文字

変換文字は、出力の表記法を指定します。変換文字は 1 文字で構成され、書式指定子の最後に配置されます。書式指定子では、変換文字と先頭の % が必須フィールドです。この 2 つの他に必須フィールドはありません。

指定子

説明

c

単一の文字

d

10 進数表記 (符号付き)

e

指数表現 (3.1415e+00 のように小文字の e を使用)

E

指数表現 (3.1415E+00 のように大文字の E を使用)

f

固定小数点表記

g

%e または %f をさらにコンパクトに表現 (重要でないゼロを表示しない)

G

%g と同様で、大文字 E を使用

o

8 進数表記 (符号なし)

s

文字列

u

10 進数表記 (符号なし)

x

16 進数表記 (小文字の af を使用)

X

16 進数表記 (大文字の AF を使用)

この例では変換文字を使用して、値 46 を 10 進数、固定小数点数、指数、16 進数で表示します。

A = 46*ones(1,4);

sprintf('%d   %f   %e   %X', A)
ans =
46   46.000000   4.600000e+01   2E

サブタイプ

サブタイプ フィールドは、変換文字の直前にあるアルファベット 1 文字です。次の標準以外のサブタイプ指定子は、変換文字 %o%x%X%u に対してサポートされます。

b

基になっている C データ型は、符号なし整数ではなく、double 型です。たとえば、倍精度値を 16 進数で表示するには、'%bx' のような形式を使用します。

t

基になっている C データ型は、符号なし整数ではなく、浮動小数です。

整数値 (変換文字 %d%i%u%o%x、または %X に対応する) の変換のビット数を指定するには、次のサブタイプのいずれかを使用します。

l

64 ビット値

h

16 ビット値

精度

書式演算子の precision はピリオドの直後に続く非負の整数です。たとえば、指定子 %7.3fprecision は 3 です。%g 指定子の場合、precision は表示する有効桁数を示します。.%f%e%E の各指定子については、precision は小数点の右側に表示する桁数を示します。

次に、precision フィールドが異なるタイプの表記にどのように影響するかを示す例をいくつかあげます。

sprintf('%g   %.2g   %f   %.2f', pi*50*ones(1,4))
ans =
157.08   1.6e+02   157.079633   157.08

精度は文字列に対する書式指定子 (すなわち、%s) では通常使用されません。文字列に対して使用し、精度フィールドの値 p が文字列の文字数よりも小さい場合は、文字列の p 個の文字のみを表示し、残りの部分が切り捨てられます。

書式指定子の外側から精度フィールドに値を指定することもできます。詳細は、書式設定文字列外でのフィールド幅と精度の指定の節を参照してください。

書式設定における precision の使用の詳細は、フィールド幅と精度の設定を参照してください。

フィールド幅

書式演算子の Field width は非負の整数で、対応する入力値を書式設定する際に使用する桁数、または文字の最小数を指定します。たとえば、指定子 %7.3f は幅 7 をもちます。

次に、width フィールドが異なるタイプの表記にどのように影響するかを示す例をいくつかあげます。

sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))
ans =
|1.570796e+02|   1.570796e+02|157.079633|     157.079633|

文字列に使用された場合、field width では文字列に空白を付加するかどうかを決めることができます。width が文字列内の文字数以下の場合は、変化はありません。

sprintf('%30s', 'Pad left with spaces')
ans =
          Pad left with spaces

書式指定子の外側から field width に値を指定することもできます。詳細は、書式設定文字列外でのフィールド幅と精度の指定の節を参照してください。

書式設定での field width の使用についての詳細は、フィールド幅と精度の設定を参照してください。

フラグ

出力を決めるオプションのフラグは、次のとおりです。

文字

説明

負符号 (-)

変換された引数をフィールドで左揃えします。

%-5.2d

正符号 (+)

常に符号文字 (+ または -) を表示します。

%+5.2d

スペース ( )

値の前にスペースを 1 個挿入します。

% 5.2f

ゼロ (0)

空白ではなくゼロを付加します。

%05.2f

シャープ記号 (#)

選択された数値変換を変更します。

  • %o%x、または %X の場合は、接頭辞 00x、または 0X を表示します。

  • %f%e、または %E の場合は、精度が 0 であっても小数点を表示します。

  • %g または %G の場合は、後続のゼロまたは小数点を削除しないでください。

%#5.0f

出力を右揃え、または左揃えします。既定は右揃えです。

sprintf('right-justify: %12.2f\nleft-justify: %-12.2f', ...
        12.3, 12.3)
ans =
    right-justify:        12.30
    left-justify: 12.30       

正の数に対して + 符号を表示します。既定では、+ 符号は省略されます。

sprintf('no sign: %12.2f\nsign: %+12.2f', ...
        12.3, 12.3)
ans =
    no sign:        12.30
    sign:       +12.30

左に空白またはゼロを付け加えます。既定では、空白が付加されます。

sprintf('space-padded: %12.2f\nzero-padded: %012.2f', ...
        5.2, 5.2)
ans =
    space-padded:         5.20
    zero-padded: 000000005.20

    メモ:   書式演算子では複数のフラグを指定できます。

値識別子

既定では、MATLAB では引数リストからのデータの値が文字列に順番に書き込まれます。値の引数をシーケンス順以外に使用する必要がある場合は、各書式指定子の数値指定子を使用して既定をオーバーライドできます。シーケンス順ではない引数を指定するには、% 記号、整数、$ 記号を続けて使用します。

演算子のシーケンスに従う場合識別子で順序を決める場合
sprintf('%s %s %s', ...
    '1st', '2nd', '3rd')
ans =
    1st 2nd 3rd
sprintf('%3$s %2$s %1$s', ...
    '1st', '2nd', '3rd')
ans =
     3rd 2nd 1st

フィールド幅と精度の設定

この節では、書式演算子のフィールド幅と精度のフィールドの使用について、詳細に説明します。

出力文字列への影響

下図は、フィールド幅と精度の設定が文字列書式設定関数の出力にどのように影響するかを説明しています。この図では、書式演算子の % 記号に続くゼロは、出力文字列の先頭に空白文字ではなくゼロを付加することを意味します。

書式設定に関する一般的な規則

  • 精度を指定しない場合、既定では 6 になります。

  • 精度 (p) が入力値の小数部分 (f) の桁数よりも小さい場合は、p 桁のみが出力の小数点の右に示され、端数は丸められます。

  • 精度 (p) が入力値の小数部分 (f) の桁数よりも大きい場合は、p 桁が出力の小数点の右に示され、小数部分には p-f 個のゼロが付加されます。

  • フィールド幅が指定されないと、既定では precision + 1 + 入力値の整数部分の桁数になります。

  • フィールド幅 (w) が、p+1 に入力値の整数部分の桁数 (n) を加えた数よりも大きい場合、zero フラグが Flags フィールドに設定されているかどうかによって、出力値の整数部分は w-(n+1+p) 個の空白文字またはゼロを左に付加して拡張されます。既定では、出力の整数部分が空白文字で拡張されます。

書式設定文字列外でのフィールド幅と精度の指定

シーケンスによる引数リストからの値を使用してフィールド幅または値を指定するには、書式演算子の field width または precision フィールドの代わりにアスタリスク (*) を使用します。

次の例では、3 つの数を書式設定して表示します。最初の書式演算子 %*f では、フィールド幅の位置にアスタリスクがあり、フィールド幅 15 のみを引数リストから取得するように指定しています。第 2 の演算子 %.*f で小数点の後にアスタリスクがあり、引数リストから精度の値を取得することを示しています。第 3 の演算子 %*.*f は、引数リストでフィールド幅と精度の両方を指定します。

	sprintf('%*f   %.*f   %*.*f', ...
        15, 123.45678, ...     % Width for 123.45678 is 15
        3, 16.42837, ...       % Precision for rand*20 is .3
        6, 4, pi)              % Width & Precision for pi is 6.4
ans =
     123.456780   16.428   3.1416

2 つの書式を組み合わせて使用できます。たとえば次のステートメントでは、引数リストからフィールド幅、書式設定文字列から精度が取得されます。

sprintf('%*.2f', 5, 123.45678)
ans =
    123.46

Width フィールドと Precision フィールドにおける識別子の使用

シーケンス順ではない引数リスト (すなわち、番号付き引数リスト) からフィールド幅と精度の値を得ることもできます。書式演算子内で、field widthprecision の両方またはいずれか一方にアスタリスクを指定し、識別子番号と、$ 記号を続けます。

前節からの次の例は、シーケンス順に並んだ引数リストからフィールド幅と精度を取得する方法を示しています。

sprintf('%*f   %.*f   %*.*f', ...
        15, 123.45678, ...
        3, 16.42837, ...
        6, 4, pi)

ans =
     123.456780   16.428   3.1416

次に示すのは、番号付けされた順序を使用して同じ設定を行う例です。最初の出力値に対するフィールド幅は 15、第 2 の値に対する精度は 3、第 3 の値に対するフィールド幅と精度は 6 と 4 です。識別子を使用してフィールド幅と精度を指定する場合は、値も識別子を使用して指定しなければなりません。

sprintf('%1$*4$f   %2$.*5$f   %3$*6$.*7$f', ...
123.45678, 16.42837, pi, 15, 3, 6, 4)

ans =
     123.456780   16.428   3.1416

識別子を使用する場合の制約

文字列の書式演算子に識別子フィールドを含む場合、その文字列内の演算子はすべて同じ方式にしなければなりません。同じ関数呼び出し内で、識別子を使用するものとそうでないものを混在させることはできません。

有効な構文無効な構文
sprintf('%d %d %d %d', ...
        1, 2, 3, 4)
ans =
    1 2 3 4
sprintf('%d %3$d %d %d', ...
        1, 2, 3, 4)
ans =
    1

書式設定文字列内の書式演算子よりも多くの値引数がコマンドに与えられた場合、MATLAB では演算子が再使用されます。ただし、これはシーケンス順を使用するコマンドに限ります。値の引数に番号を付けて関数を呼び出す場合は、書式演算子を再使用することはできません。

有効な構文無効な構文
sprintf('%d', 1, 2, 3, 4)
ans =
    1234
sprintf('%1$d', 1, 2, 3, 4)
ans =
    1

また、値引数がベクトルまたは配列の形式である場合は、識別子を使用しないでください。

有効な構文無効な構文
v = [1.4 2.7 3.1];

sprintf('%.4f %.4f %.4f', v)
ans =
    1.4000 2.7000 3.1000
v = [1.4 2.7 3.1];

sprintf('%3$.4f %1$.4f %2$.4f', v)
ans =
   Empty string: 1-by-0

この情報は役に立ちましたか?