fprintf
データのファイルへの書き込み
説明
fprintf(
は、fileID
,formatSpec
,A1,...,An
)formatSpec
を配列 A1,...An
のすべての要素に列順で適用し、テキスト ファイルにデータを書き込みます。関数 fprintf
は、関数 fopen
の呼び出しで指定されたエンコード スキームを使用します。
fprintf(
は、データに書式を設定し、その結果を画面に表示します。formatSpec
,A1,...,An
)
例
次のように複数の数値およびリテラル テキストを画面に出力します。
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
への最初の呼び出しでヘッダー テキスト x
と exp(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
から取得したファイル識別子。fprintf
ではインターネット URL への書き込みはサポートされていません。標準出力の場合は
1
(画面)。標準エラーの場合は
2
。
データ型: double
出力フィールドの書式。書式演算子を使用して指定します。formatSpec
には通常のテキストおよび特殊文字を含めることもできます。
formatSpec
に \n
などのエスケープ文字を表すリテラル テキストが含まれる場合、fprintf
はエスケープ文字を変換します。
formatSpec
は一重引用符で囲まれた文字ベクトルか、または string スカラーとすることができます。
書式演算子
書式演算子はパーセント記号 %
で始まり、変換文字で終わります。変換文字は必須です。オプションとして、%
と変換文字の間に識別子、フラグ、フィールド幅、精度およびサブタイプ演算子を指定できます (ここでは読みやすいようにスペースが表示されていますが、実際には演算子の間にスペースは使用できません)。
変換文字
次の表では、数値データおよび文字データをテキストとして書式設定するための変換文字を説明します。
値のタイプ | 変換 | 詳細 |
---|---|---|
整数、符号付き |
| 基数 10 |
整数、符号なし |
| 基数 10 |
| 基数 8 (8 進法) | |
| 基数 16 (16 進法)、小文字 | |
|
| |
浮動小数点数 |
| 固定小数点表記 (小数点以下の桁数の指定には精度演算子を使用) |
|
| |
|
| |
|
| |
|
| |
文字または文字列 |
| 単一の文字 |
| 文字ベクトルまたは string 配列。出力テキストのタイプは |
オプションの演算子
オプションの識別子、フラグ、フィールド幅、精度およびサブタイプ演算子は、出力テキストの書式をさらに細かく定義します。
識別子
関数の入力引数の処理順序。構文
を使用します。ここで、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
の場合は、接頭辞0
、0x
、または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
および6
はexp(1)
の出力のフィールド幅と精度です。メモ
浮動小数点値の精度演算子を入力の数値データ型の精度より大きい値に指定すると、入力値の精度が指定の精度にならない場合があります。結果はコンピューターのハードウェアとオペレーティング システムによって異なります。
サブタイプ
サブタイプ演算子を使用して、浮動小数点値を 8 進数、10 進数または 16 進数の値として出力できます。サブタイプ演算子は、変換文字の直前に指定します。次の表では、サブタイプを使用できる変換を示します。
入力値の型
サブタイプと変換文字
出力値の型
浮動小数点数
%bx
または%bX
%bo
%bu
16 進数、8 進数または 10 進数の倍精度値
例:%bx
はpi
を400921fb54442d18
と出力します%tx
または%tX
%to
%tu
16 進数、8 進数または 10 進数の単精度値
例:%tx
はpi
を40490fdb
と出力します
書式演算子の前後のテキスト
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'
は、pi
を3.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.
拡張機能
使用上の注意および制限:
formatSpec
パラメーターは定数でなければなりません。formatSpec
では、16 進数は [0 7F]、8 進数は [0 177] の範囲になければなりません。fileID
が定数値1
または2
がもち、外部呼び出しができない場合、コード ジェネレーターは C 言語のprintf
呼び出しを生成します。外部呼び出しが無効になっている場合、またはfprintf
がparfor
ループ内で呼び出された場合に外部呼び出しができません。次のような場合、生成されたコードでの
fprintf
の動作は、MATLAB の動作ではなく C コンパイラの動作と一致します。書式指定子に
%e
や%E
などの対応する C 書式指定子がある。fprintf
がparfor
ループの内部で呼び出される。外部呼び出しが無効になっている。
次のオプションと機能はサポートされません。
入力値を並べ替えるための
n$
位置識別子。配列の出力。
サブタイプを使用した、浮動小数点数の 8 進数、10 進数または 16 進数の値としての出力。
書式指定子
%s
を指定してfprintf
を呼び出す場合は、入力文字ベクトルの途中に null 文字を含めることはできません。null 文字を書き込むには、fprintf(fid, '%c', char(0))
を使用します。入力引数の型は、書式の型と一致していなければなりません。たとえば、
n
が double の場合、コード生成で次のコードは許可されません。str = fprintf('%d',n)
コード生成では、最初に
n
をint8
などの符号付き整数型にキャストします。str = fprintf('%d',int8(n))
整数の書式指定子を指定して
fprintf
を呼び出す場合、整数引数の型はターゲットのハードウェアがネイティブ C 型として表現できる型でなければなりません。たとえば、fprintf('%d', int64(n))
を呼び出す場合、ターゲットのハードウェアは 64 ビット整数をサポートするネイティブ C 型を備えていなければなりません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
fprintf
関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
この関数は GPU 配列を受け入れますが、GPU 上では実行されません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
この関数は分散配列に対して演算を行いますが、クライアントの MATLAB で実行されます。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)