Main Content

fprintf

データのファイルへの書き込み

説明

fprintf(fileID,formatSpec,A1,...,An) は、formatSpec を配列 A1,...An のすべての要素に列順で適用し、テキスト ファイルにデータを書き込みます。関数 fprintf は、関数 fopen の呼び出しで指定されたエンコード スキームを使用します。

fprintf(formatSpec,A1,...,An) は、データに書式を設定し、その結果を画面に表示します。

nbytes = fprintf(___) は、前述の構文の任意の入力引数を使用して、fprintf が書き込むバイト数を返します。

すべて折りたたむ

次のように複数の数値およびリテラル テキストを画面に出力します。

A1 = [9.9, 9900];
A2 = [8.8,  7.7 ; ...
      8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm

formatSpec の入力 %4.2f は、出力の各行の先頭の値が小数点以下 2 桁を含む、フィールド幅 4 桁の浮動小数点数であることを示します。formatSpec の入力 %8.3f は、出力の各行の 2 番目の値が小数点以下 3 桁を含む、フィールド幅 8 桁の浮動小数点数であることを示します。\n は新しい行を開始する制御文字です。

小数部をもつ倍精度値を整数値に明示的に変換します。

a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));
1
3
5

formatSpec の入力 %d は、ベクトル round(a) の各値を符号付き整数として出力します。\n は、新しい行を開始する制御文字です。

指数関数の短いテーブルを exp.txt という名前のテキスト ファイルに書き込みます。

x = 0:.1:1;
A = [x; exp(x)];

fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);

fprintf への最初の呼び出しでヘッダー テキスト xexp(x) が表示され、2 番目の呼び出しで変数 A からの値が表示されます。

ファイルの読み取りに Microsoft® メモ帳を使用する場合、改行には '\n' の代わりに '\r\n' を使用します。たとえば、fprintf への呼び出しを以下のように置き換えます。

fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);

MATLAB® のインポート関数、すべての UNIX® アプリケーション、および Microsoft Word とワードパッドは、'\n' を改行インジケーターとして認識します。

type コマンドでファイルの内容を表示します。

type exp.txt
     x       exp(x)
  0.00   1.00000000
  0.10   1.10517092
  0.20   1.22140276
  0.30   1.34985881
  0.40   1.49182470
  0.50   1.64872127
  0.60   1.82211880
  0.70   2.01375271
  0.80   2.22554093
  0.90   2.45960311
  1.00   2.71828183

ファイルにデータを書き込み、書き込んだバイト数を返します。

ファイルにデータの配列 A を書き込み、fprintf が書き込んだバイト数を取得します。

A = magic(4);

fileID = fopen('myfile.txt','w');
nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96

関数 fprintf により、ファイルに 96 バイトが書き込まれました。

ファイルを閉じます。

fclose(fileID);

type コマンドでファイルの内容を表示します。

type('myfile.txt')
   16     5     9     4
    2    11     7    14
    3    10     6    15
   13     8    12     1

画面上にハイパーリンク (MathWorks Web サイト) を表示します。

url = 'https://www.mathworks.com';
sitename = 'The MathWorks Web Site';

fprintf('<a href = "%s">%s</a>\n',url,sitename)

formatSpec 入力の %s は、変数 url および sitename の値がテキストとして出力されなければならないことを示します。

入力引数

すべて折りたたむ

ファイル識別子。次のいずれかとして指定します。

  • 関数 fopen から取得されるファイル識別子。

  • 標準出力の場合は 1 (画面)。

  • 標準エラーの場合は 2

データ型: double

出力フィールドの書式。書式演算子を使用して指定します。formatSpec には通常のテキストおよび特殊文字を含めることもできます。

formatSpec\n などのエスケープ文字を表すリテラル テキストが含まれる場合、fprintf はエスケープ文字を変換します。

formatSpec は一重引用符で囲まれた文字ベクトルか、または string スカラーとすることができます。

書式演算子

書式演算子はパーセント記号 % で始まり、変換文字で終わります。変換文字は必須です。オプションとして、% と変換文字の間に識別子、フラグ、フィールド幅、精度およびサブタイプ演算子を指定できます (ここでは読みやすいようにスペースが表示されていますが、実際には演算子の間にスペースは使用できません)。

Schematic of formatting operator characters.

変換文字

次の表では、数値データおよび文字データをテキストとして書式設定するための変換文字を説明します。

値のタイプ変換詳細

整数、符号付き

%d または %i

基数 10

整数、符号なし

%u

基数 10

%o

基数 8 (8 進法)

%x

基数 16 (16 進法)、小文字 af

%X

%x と同じ、大文字 AF

浮動小数点数

%f

固定小数点表記 (小数点以下の桁数の指定には精度演算子を使用)

%e

3.141593e+00 などの指数表現 (小数点以下の桁数の指定には精度演算子を使用)

%E

%e と同じだが、3.141593E+00 のように大文字 (小数点以下の桁数の指定には精度演算子を使用)

%g

%e または %f をコンパクトにしたもので、後続のゼロなし (有効桁数の指定には精度演算子を使用)

%G

%E または %f をコンパクトにしたもので、後続のゼロなし (有効桁数の指定には精度演算子を使用)

文字または文字列

%c

単一の文字

%s

文字ベクトルまたは string 配列。出力テキストのタイプは formatSpec のタイプと同じです。

オプションの演算子

オプションの識別子、フラグ、フィールド幅、精度およびサブタイプ演算子は、出力テキストの書式をさらに細かく定義します。

  • 識別子

    関数の入力引数の処理順序。構文 n$ を使用します。ここで、n は関数呼び出し内の他の入力引数の位置を表します。

    例: ('%3$s %2$s %1$s %2$s','A','B','C') は入力引数 'A''B''C'C B A B として出力します。

    メモ: 入力引数が配列の場合、識別子を使用してその入力引数の特定の配列要素を指定することはできません。

  • フラグ

    '–'

    左揃えします。
    例: %-5.2f
    例: %-10s

    '+'

    常に数値の符号文字 (+ または –) を出力します。
    例: %+5.2f
    テキストを右揃えします。
    例: %+10s

    ' '

    値の前にスペースを 1 つ挿入します。
    例: % 5.2f

    '0'

    値の前にゼロを入れてフィールド幅をパディングします。
    例: %05.2f

    '#'

    選択した数値変換を次のように変更します。

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

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

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

    例: %#5.0f

  • フィールド幅

    出力する最小文字数。フィールド幅演算子は、数字、あるいは入力引数を参照するアスタリスク (*) にすることができます。

    フィールド幅演算子として * を指定する場合、他の入力引数は出力される幅と値の両方を提供しなければなりません。幅と値は引数のペア、または数値配列内のペアにすることができます。フィールド幅演算子として * を使用すると、さまざまな値をさまざまな幅で出力できます。

    例: 入力引数 ('%12d',intmax)('%*d',12,intmax) と等価です。

    例: 入力引数 ('%*d',[2 10 5 100])'10 100' を返します。このとき、10 には 2 つのスペース、100 には 5 つのスペースが割り当てられます。あるいは、フィールドの幅と値を ('%*d',2,10,5,100) のように複数の引数として指定することもできます。

    フラグで特に指定されていない限り、この関数は値の前にスペースを追加してフィールド幅までパディングします。

  • 精度

    %f%e または %E

    小数点以下の桁数
    例: '%.4f'pi'3.1416' と出力します

    %g または %G

    有効桁数
    例: '%.4g'pi'3.142' と出力します。

    精度演算子は、数字、あるいは引数を参照するアスタリスク (*) にすることができます。

    フィールド精度演算子として * を指定する場合、他の入力引数は出力される精度と値の両方を提供しなければなりません。精度と値は引数のペア、または数値配列内のペアにすることができます。精度演算子として * を使用すると、さまざまな値をさまざまな精度で出力できます。

    フィールド幅と精度演算子として *.* を指定する場合、フィールド幅、精度、値を 3 成分として指定しなければなりません。

    例: 入力引数 ('%.4f',pi)('%.*f',4,pi) と等価です。

    例: 入力引数 ('%6.4f',pi)('%*.*f',6,4,pi) と等価です。

    例: 入力引数 ('%*.*f',6,4,pi,9,6,exp(1)) は、'3.1416 2.718282' を返します。ここで、9 および 6exp(1) の出力のフィールド幅と精度です。

    メモ

    浮動小数点値の精度演算子を入力の数値データ型の精度より大きい値に指定すると、入力値の精度が指定の精度にならない場合があります。結果はコンピューターのハードウェアとオペレーティング システムによって異なります。

  • サブタイプ

    サブタイプ演算子を使用して、浮動小数点値を 8 進数、10 進数または 16 進数の値として出力できます。サブタイプ演算子は、変換文字の直前に指定します。次の表では、サブタイプを使用できる変換を示します。

    入力値の型

    サブタイプと変換文字

    出力値の型

    浮動小数点数

    %bx または %bX
    %bo
    %bu

    16 進数、8 進数または 10 進数の倍精度値
    例: %bxpi400921fb54442d18 と出力します

    %tx または %tX
    %to
    %tu

    16 進数、8 進数または 10 進数の単精度値
    例: %txpi40490fdb と出力します

書式演算子の前後のテキスト

formatSpec では、パーセント記号 % の前や、変換文字の後に追加のテキストを含めることができます。次のテキストを追加できます。

  • 出力する通常のテキスト。

  • 通常のテキストとして入力できない特殊文字。次の表では、formatSpec で特殊文字を表す方法を説明します。

    特殊文字

    表現

    一重引用符

    ''

    パーセント文字

    %%

    バックスラッシュ

    \\

    アラーム

    \a

    バックスペース

    \b

    フォーム フィード

    \f

    改行

    \n

    キャリッジ リターン

    \r

    水平タブ

    \t

    垂直タブ

    \v

    Unicode® 数値を 16 進数 N で表現できる文字

    \xN

    例: fprintf('\x5A')'Z' を返す

    Unicode 数値を 8 進数 N で表現できる文字

    \N

    例: fprintf('\132')'Z' を返す

書式演算子を使用した変換動作の注意点

  • 数値変換は複素数の実数部のみを出力します。

  • 数値のテキスト変換など、データに適さない変換を指定すると、MATLAB は指定した変換をオーバーライドし、%e を使用します。

    例: '%s' は、pi3.141593e+00 に変換します。

  • 整数値にテキスト変換 (%c または %s) を適用する場合、MATLAB は有効な文字コードに対応する値を文字に変換します。

    例: '%s' は、[65 66 67]ABC に変換します。

数値配列または文字配列。スカラー、ベクトル、行列または多次元配列として指定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

出力引数

すべて折りたたむ

fprintf が書き込むバイト数。スカラーとして返されます。nbytes は、ファイルへの書き込み時、文字エンコードによって決まります。nbytes は、画面へのデータの出力時、画面に表示される文字数です。

ヒント

  • 関数 sscanf および fscanf の読み取りに対する書式指定子は、関数 sprintf および fprintf の書き込み用の形式とは異なります。読み取り関数は精度フィールドをサポートしません。幅フィールドは、書き込み用には最小値を、読み取り用には最大値を指定します。

  • 無効な書式演算子または特殊文字を指定すると、fprintf はその無効な演算子または文字までのすべてのテキストを出力し、残りを破棄します。

    例: formatSpec'value = %z' の場合、%z は書式演算子ではないため、fprintf'value =' を出力します。

    例: formatSpec'character \x99999 = %s' の場合、\x99999 は有効な特殊文字ではないため、fprintf'character' を出力します。

参照

[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Inc., 1988.

[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.

拡張機能

バージョン履歴

R2006a より前に導入