fprintf

fprintf( fileID , formatSpec , A1. An ) applies the formatSpec to all elements of arrays A1. An in column order, and writes the data to a text file. fprintf uses the encoding scheme specified in the call to fopen .

fprintf( formatSpec , A1. An ) formats data and displays the results on the screen.

nbytes = fprintf( ___ ) returns the number of bytes that fprintf writes, using any of the input arguments in the preceding syntaxes.

Examples

Print Literal Text and Array Values

Print multiple numeric values and literal text to the screen.

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

%4.2f in the formatSpec input specifies that the first value in each line of output is a floating-point number with a field width of four digits, including two digits after the decimal point. %8.3f in the formatSpec input specifies that the second value in each line of output is a floating-point number with a field width of eight digits, including three digits after the decimal point. \n is a control character that starts a new line.

Print Double-Precision Values as Integers

Explicitly convert double-precision values with fractions to integer values.

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

%d in the formatSpec input prints each value in the vector, round(a) , as a signed integer. \n is a control character that starts a new line.

Write Tabular Data to Text File

Write a short table of the exponential function to a text file called 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);

The first call to fprintf prints header text x and exp(x) , and the second call prints the values from variable A .

If you plan to read the file with Microsoft ® Notepad , use '\r\n' instead of '\n' to move to a new line. For example, replace the calls to fprintf with the following:

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

MATLAB ® import functions, all UNIX ® applications, and Microsoft Word and WordPad recognize '\n' as a newline indicator.

View the contents of the file with the type command.

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

Get Number of Bytes Written to File

Write data to a file and return the number of bytes written.

Write an array of data, A , to a file and get the number of bytes that fprintf writes.

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

The fprintf function wrote 96 bytes to the file.

fclose(fileID);

View the contents of the file with the type command.

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

Display Hyperlinks in Command Window

Display a hyperlink (The MathWorks Web Site) on the screen.

url = 'https://www.mathworks.com'; sitename = 'The MathWorks Web Site'; fprintf('%s\n',url,sitename)

%s in the formatSpec input indicates that the values of the variables url and sitename , should be printed as text.

Input Arguments

fileID — File identifier
1 (default) | 2 | scalar

File identifier, specified as one of the following:

Data Types: double

formatSpec — Format of output fields
formatting operators

Format of the output fields, specified using formatting operators. formatSpec also can include ordinary text and special characters.

If formatSpec includes literal text representing escape characters, such as \n , then fprintf translates the escape characters.

formatSpec can be a character vector in single quotes, or a string scalar.

Formatting Operator

A formatting operator starts with a percent sign, % , and ends with a conversion character. The conversion character is required. Optionally, you can specify identifier, flags, field width, precision, and subtype operators between % and the conversion character. (Spaces are invalid between operators and are shown here only for readability).

Schematic of formatting operator characters.

Conversion Character

This table shows conversion characters to format numeric and character data as text.

Base 16 (hexadecimal), lowercase letters a – f

Same as %x , uppercase letters A – F

Fixed-point notation (Use a precision operator to specify the number of digits after the decimal point.)

Exponential notation, such as 3.141593e+00 (Use a precision operator to specify the number of digits after the decimal point.)

Same as %e , but uppercase, such as 3.141593E+00 (Use a precision operator to specify the number of digits after the decimal point.)

The more compact of %e or %f , with no trailing zeros (Use a precision operator to specify the number of significant digits.)

The more compact of %E or %f , with no trailing zeros (Use a precision operator to specify the number of significant digits.)

Characters or strings

Character vector or string array. The type of the output text is the same as the type of formatSpec .

Optional Operators

The optional identifier, flags, field width, precision, and subtype operators further define the format of the output text.

'–' Left-justify.
Example: %-5.2f
Example: %-10s
'+' Always print a sign character (+ or –) for any numeric value.
Example: %+5.2f
Right-justify text.
Example: %+10s
' ' Insert a space before the value.
Example: % 5.2f
'0' Pad to field width with zeros before the value.
Example: %05.2f
'#' Modify selected numeric conversions:

Example: %#5.0f

For %f , %e , or %E Number of digits to the right of the decimal point
Example: '%.4f' prints pi as '3.1416'
For %g or %G Number of significant digits
Example: '%.4g' prints pi as '3.142'

The precision operator can be a number, or an asterisk ( * ) to refer to an argument. When you specify * as the field precision operator, the other input arguments must provide both a precision and a value to be printed. Precisions and values can be pairs of arguments, or pairs within a numeric array. With * as the precision operator, you can print different values to different precisions. When you specify *.* as field width and precision operators, you must specify field widths, precisions, and values as triplets. Example: The input arguments ('%.4f',pi) are equivalent to ('%.*f',4,pi) . Example: The input arguments ('%6.4f',pi) are equivalent to ('%*.*f',6,4,pi) . Example: The input arguments ('%*.*f',6,4,pi,9,6,exp(1)) return '3.1416 2.718282' , with 9 and 6 as the field width and precision for the output of exp(1) .

Note If you specify a precision operator for floating-point values that exceeds the precision of the input numeric data type, the results might not match the input values to the precision you specified. The result depends on your computer hardware and operating system.

Input Value Type Subtype and Conversion Character Output Value Type
Floating-point number %bx or %bX
%bo
%bu
Double-precision hexadecimal, octal, or decimal value
Example: %bx prints pi as 400921fb54442d18
%tx or %tX
%to
%tu
Single-precision hexadecimal, octal, or decimal value
Example: %tx prints pi as 40490fdb

Text Before or After Formatting Operators

formatSpec can also include additional text before a percent sign, % , or after a conversion character. The text can be:

Special Character Representation
Single quotation mark ''
Percent character %%
Backslash \\
Alarm \a
Backspace \b
Form feed \f
New line \n
Carriage return \r
Horizontal tab \t
Vertical tab \v
Character whose Unicode ® numeric value can be represented by the hexadecimal number, N \xN Example: fprintf ('\x5A') returns 'Z'
Character whose Unicode numeric value can be represented by the octal number, N \N Example: fprintf ('\132') returns 'Z'

Notable Behavior of Conversions with Formatting Operators

A1. An — Numeric or character arrays
scalar | vector | matrix | multidimensional array

Numeric or character arrays, specified as a scalar, vector, matrix, or multidimensional array.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

Output Arguments

nbytes — Number of bytes
scalar

Number of bytes that fprintf writes, returned as a scalar. When writing to a file, nbytes is determined by the character encoding. When printing data to the screen, nbytes is the number of characters displayed on the screen.

Tips

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.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

str = sprintf('%d',n)
For code generation, first cast n to a signed integer type such as int8 .
str = sprintf('%d',int8(n))

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool .

This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.

GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

The fprintf function supports GPU array input with these usage notes and limitations:

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox) .

Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

Usage notes and limitations:

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox) .

Version History

Introduced before R2006a