MATLAB Function Reference |
Syntax
count = fprintf(fid,format,A,...)
Description
count = fprintf(fid,format,A,...)
以 format
所指定的格式來將矩陣A(和其他額外的矩陣)中的資料格式化,並寫到以fid為識別編號的檔案中。fprintf
回傳所寫入的byte數
fid
是從 fopen
.
(也有可能是代表檔案輸出裝置(螢幕)的 1
或檔案錯誤輸出裝置的2
, 可參閱 fopen
)中所得到的檔案識別編號(file identifier)。 未設定 fid
則會列印在螢幕上。
Format String
format
引數中包含了 C語言中的轉換規格(conversion specifications)。轉換規格(conversion specifications)包含了表示格式(notation)、對齊格式(alignment)、有意義的數字(significant
digits)、表示長度(field width)和其他有關輸出的格式。 字串中還可包含像換行字元 (newline
characters)和tab等等不會被印出的跳脫字元(escape characters)。
轉換規格(conversion specifications) 以 %
字元作開始,並包括下列必要或非必要的元素:
Flags
符號 |
說明 |
範例 |
負號 (- ) |
把引數靠左對齊。 | %-5.2d |
正號 (+ ) |
永遠表示正負號(+ or -)。 |
%+5.2d |
零 (0 ) |
將空白部分以0來代替。 |
%05.2d |
Field Width and Precision Specifications
項目 |
說明 |
Example |
表示長度(Field width) |
數字決定至少要印幾位數字出來。 |
%6f |
精確度(Precision) |
包含點 (.)的數字決定小數點右邊要印出幾位數字出來。 |
%6.2f |
Conversion Characters
轉換字元(Conversion characters)指定了輸出的格式和形態。
轉換字元(Conversion characters) %o
, %u
, %x
,
和 %X
支援子形態指定(subtype specifier)。詳細請參考 Remarks。
下表中列出不會印出的跳脫字元(escape character sequences)。
字元 |
敘述 |
|
倒退刪除(Backspace) |
|
Form feed |
|
換行字元(new line) |
|
Carriage return |
|
Horizontal tab |
|
反斜線(Backslash) |
單引號(Single quotation mark) |
|
%% |
百分比字元(Percent character) |
Remarks
fprintf
和ANSI C語言中的fscanf的用法十分相似,也有下列特性
fprintf
把 MATLAB
的雙倍符點數轉成整數,而雙倍符點數中卻有整數無法表示的部分(例如小數部分), MATLAB並不會做形態的轉換,而會利用指數方式來輸出。
若要形態成功地轉換,請先利用 fix
, floor
, ceil
, round
等指令先把雙倍符點數中的值轉換成整數可以表示的值,再利用fprinf做轉換。%o
, %u
, %x
, %X
來說,可以使用下列的非標準子形態指定(non-standard
subtype specifiers)b |
C語言中的形態將會是雙倍浮點數,而不是無正負號的整數(unsigned integer)
。例如要印出十六進位的雙倍浮點數,可以使用 '%bx '。 |
t |
C這言中的形態將會是浮點數,而不是無正負號的整數(unsigned integer)。 |
fprintf
會向量化。
若A中有多個元素,指令會以行為順序(columnwise)的方式重覆執行直到A中的元素都被執行過為止。若有多個矩陣引數,指令也會以一個一個矩陣重覆執行。 Examples
x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt',
'w');
fprintf(fid,'%6.2f %12.8f\n',y);
fclose(fid)
0.00 1.00000000 0.10 1.10517092 ... 1.00 2.71828183
fprintf('A unit circle has circumference %g.\n',2*pi)
A unit circle has circumference 6.283186.
fprintf(1,'It''s
Friday.\n')
It's
Friday.
B = [8.8 7.7; 8800 7700] fprintf(1,'X is %6.2f meters or %8.3f mm\n',9.9,9900,B)
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
我們可以利用整數轉換指定(integral conversion specifier)來明確地將MATLAB中的雙倍浮點數轉成整數。例如將有正負號的32bit資料轉成16進位的格式:
a = [6 10 14 44]; fprintf('%9X\n',a + (a<0)*2^32) 6 A E 2C
See Also
fclose
, ferror
, fopen
, fread
, fscanf
, fseek
, ftell
, fwrite
, disp
References
[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.
fplot | fprintf (serial) |