Запишите данные к текстовому файлу
fprintf(fileID,formatSpec,A1,...,An)
fprintf(formatSpec,A1,...,An)
nbytes = 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
%4.2f
во входном параметре formatSpec
указывает, что первое значение в каждой строке вывода является числом с плавающей запятой с шириной поля четырех цифр, включая две цифры после десятичной точки. %8.3f
во входном параметре formatSpec
указывает, что второе значение в каждой строке вывода является числом с плавающей запятой с шириной поля восьми цифр, включая три цифры после десятичной точки. \n
является управляющим символом, который запускает новую строку.
Печать с двойной точностью значения как Целые числа
Явным образом преобразуйте с двойной точностью значения с частями к целочисленным значениям.
a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));
1
3
5
%d
в formatSpec
ввел, распечатывает каждое значение в векторе, round(a)
, как целое число со знаком. \n
является управляющим символом, который запускает новую строку.
Запись табличных данных в текстовый файл
Запишите короткую таблицу показательной функции к текстовому файлу под названием exp.txt
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)
, и второй вызов распечатывает значения от переменного A
.
Если вы планируете считать файл с Блокнотом Microsoft®, используйте '\r\n'
вместо '\n'
, чтобы переместиться в новую строку. Например, замените вызовы fprintf
со следующим:
fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);
Функции импорта MATLAB®, все приложения UNIX®, и Microsoft Word и WordPad распознают '\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) на экране.
url = 'https://www.mathworks.com';
sitename = 'The MathWorks Web Site';
fprintf('<a href = "%s">%s</a>\n',url,sitename)
%s
во входном параметре formatSpec
указывает, что значения переменных url
и sitename
, должен быть распечатан как текст.
Входные параметры
fileID
— Идентификатор файла
1
(значение по умолчанию) | 2
| скаляр
Идентификатор файла, заданный как одно из следующего:
Идентификатор файла получен из fopen
.
1
для стандартного вывода (экран).
2
для стандартной погрешности.
Типы данных: double
formatSpec
Формат выходных полей
форматирование операторов
Формат выходных полей, заданных операторов форматирования использования. formatSpec
также может включать обычный текст и специальные символы.
formatSpec
может быть вектором символа в одинарных кавычках, или, запускающийся в R2016b, скаляре строки.
Оператор форматирования
Оператор форматирования запускается со знака процента, %
, и заканчивается символом преобразования. Символ преобразования требуется. Опционально, можно задать идентификатор, флаги, ширину поля, точность, и выделить подтипы в операторах между %
и символом преобразования. (Пробелы недопустимы между операторами и показаны здесь только для удобочитаемости).

Символ преобразования
Эта таблица показывает символы преобразования, чтобы отформатировать числовые и символьные данные как текст.
Тип значения Преобразование Детали Целое число, подписанное
%d
или %i
Основа 10
Целое число, без знака
U
Основа 10
O
Базируйтесь 8 (восьмеричный)
X
Основывайте 16 (шестнадцатеричных), строчных букв a
–f
X
То же самое как %x
, прописные буквы A
–F
Число с плавающей запятой
F
Представление с фиксированной точкой (Используют оператор точности, чтобы задать количество цифр после десятичной точки.)
E
Экспоненциальное представление, такое как 3.141593e+00
(Используют оператор точности, чтобы задать количество цифр после десятичной точки.)
E
То же самое как %e
, но верхний регистр, такой как 3.141593E+00
(Используют оператор точности, чтобы задать количество цифр после десятичной точки.)
G
Более компактный из %e
или %f
, без конечных нулей (Используют оператор точности, чтобы задать количество значительных цифр.)
G
Более компактный из %E
или %f
, без конечных нулей (Используют оператор точности, чтобы задать количество значительных цифр.)
Символы или строки
C
Отдельный символ
S
Вектор символа или массив строк. Тип синтезируемого текста совпадает с типом formatSpec
.
Дополнительные операторы
Дополнительный идентификатор, флаги, ширина поля, точность и операторы подтипа далее задают формат синтезируемого текста.
Идентификатор
Порядок для обработки аргументов входного параметра функции. Используйте синтаксис n$
, где n
представляет положения других входных параметров в вызове функции.
Пример: (' %3$s %2$s %1$s %2$s','A', 'B', 'C')
, распечатывает входные параметры
, 'B'
, 'C'
можно следующим образом: C B B
.
Примечание: Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива от того входного параметра.
Флаги
'–'
Лево-выровнять по ширине.
Пример 5. 2f
Пример: % - 10-е
'+'
Всегда распечатывайте символ знака (+ или –) для любого числового значения.
Пример: % +5.2f
Право - выравнивает текст.
Пример: % +10s
' '
Вставьте пробел перед значением.
Пример 5. 2f
'0'
Заполните к ширине поля нулями перед значением.
Пример: %05.2f
'#'
Измените выбранные числовые преобразования:
Для %o
%x
или %X
, распечатывает 0
, 0x
или префикс 0X
.
Для %f
%e
или %E
, распечатывает десятичную точку, даже когда точность 0.
Для %g
или %G
, не удаляйте конечные нули или десятичную точку.
Пример 5. 0f
Ширина поля
Минимальное количество символов, чтобы распечатать. Оператор ширины поля может быть номером или звездочкой (*
), чтобы относиться к входному параметру.
Пример: Входные параметры (' %12d', intmax)
эквивалентны (' % *d', 12, intmax)
.
Функция заполняет к ширине поля пробелами перед значением, если в противном случае не задано флагами.
Точность
Для %f
, %e
или %E
Количество цифр справа от десятичной точки
Пример: '%.4f'
распечатывает пи
как '3,1416'
Для %g
или %G
Количество значительных цифр
Пример:
'%.4g'
распечатывает пи
как '3,142'
Оператор точности может быть номером или звездочкой (*
), чтобы относиться к аргументу.
Пример: Входные параметры (' %6.4f', пи)
эквивалентны (' % *.*f', 6, 4, пи)
.
Примечание
Если вы задаете оператор точности для значений с плавающей точкой, который превышает точность входного типа числовых данных, результаты не могут совпадать с входными значениями к точности, которую вы задали. Результат зависит от вашего компьютерного оборудования и операционной системы.
Подтипы
Можно использовать оператор подтипа, чтобы распечатать значение с плавающей точкой как его восьмеричное, десятичное, или шестнадцатеричное значение. Оператор подтипа сразу предшествует символу преобразования. Эта таблица показывает преобразования, которые могут использовать подтипы.
Тип входного значения
Подтип и символ преобразования
Тип выходного значения
Число с плавающей запятой
%bx
или %bX
%bo
%bu
С двойной точностью шестнадцатеричное, восьмеричное, или десятичное значение
Пример: %bx
распечатывает пи
как 400921fb54442d18
%tx
или %tX
%to
%tu
Шестнадцатеричное, восьмеричное, или десятичное значение с одинарной точностью
Пример: %tx
распечатывает пи
как 40490fdb
Текст прежде или после операторов форматирования
formatSpec
может также включать дополнительный текст перед знаком процента, %
, или после символа преобразования. Текст может быть:
Обычный текст, чтобы распечатать.
Специальные символы, которые вы не можете ввести как обычный текст. Эта таблица показывает, как представлять специальные символы в formatSpec
.
Специальный символ
Представление
Единственная кавычка
''
Символ процента
%%
Наклонная черта влево
\\
Предупреждение
A
Клавиша Backspace
B
Перевод формата
F
Новая строка
N
Возврат каретки
R
Горизонтальная вкладка
T
Вертикальная вкладка
V
Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, N
\xN
Пример: sprintf ('\x5A')
возвращает 'Z'
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, N
N
Пример: sprintf ('\132')
возвращает 'Z'
Известное поведение преобразований с операторами форматирования
Числовые преобразования распечатывают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, таким как текстовое преобразование для числового значения, MATLAB заменяет заданное преобразование и использует %e
.
Пример: '%s'
преобразовывает пи
в 3.141593e+00
.
Если вы применяете текстовое преобразование (или %c
или %s
) к целочисленным значениям, MATLAB преобразовывает значения, которые соответствуют кодам допустимого символа к символам.
Пример: '%s'
преобразовывает [65 66 67]
к ABC
.
Типы данных: char | string
A1,...,An
— Числовой или символьные массивы
скаляр | вектор | матрица | многомерный массив
Числовой или символьные массивы, заданные как скаляр, вектор, матрица или многомерный массив.
Типы данных: единственный
| удваиваются
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| логический
| char
Выходные аргументы
nbytes
Количество байтов
скаляр
Количество байтов, которые пишет fprintf
, возвратилось как скаляр. При записи в файл nbytes
определяется кодировкой символов. При печати данных на экран nbytes
является количеством символов, отображенных на экране.
Советы
Спецификаторы формата для функций чтения
sscanf
и fscanf
отличаются от форматов для функций записи sprintf
и fprintf
. Функции чтения не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.
Ссылки
[1] Керниган, B. W., и Д. M. Ричи, язык программирования C, второй выпуск, Prentice-Hall, Inc., 1988.
[2] Спецификация X3.159-1989 ANSI: “Язык программирования C”, ANSI, 1 430 Broadway, Нью-Йорк, Нью-Йорк 10018.
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.
Указания и ограничения по применению:
Параметр formatSpec
должен быть постоянным.
В formatSpec
шестнадцатеричные числа должны быть в области значений [0 7F], и восьмеричные числа должны быть в области значений [0 177].
Если fileID
имеет постоянное значение 1
или 2
, и внешние вызовы не возможны, генератор кода производит вызов printf
C. Внешние вызовы не возможны, когда внешние вызовы отключены или когда fprintf
называется в цикле parfor
.
Поведение fprintf
в сгенерированном коде совпадает с поведением компилятора C вместо поведения MATLAB в этих случаях:
Спецификатор формата имеет соответствующий спецификатор формата C, например, %e
или %E
.
Вызов fprintf
в цикле parfor
.
Отключены внешние вызовы.
Эти опции и возможности не поддержаны:
Идентификатор положения n$
для переупорядочения входных значений
Печать массивов
Используя подтипы, чтобы распечатать число с плавающей запятой как его восьмеричное, десятичное, или шестнадцатеричное значение
Когда вы вызываете fprintf
со спецификатором формата %s
, вы не можете поместить нулевой символ посреди вектора вводимого символа. Чтобы записать нулевой символ, используйте fprintf(fid, '%c', char(0))
.
Типы входного параметра должны совпадать со своими типами формата. Например, если n
является двойным, генерация кода не позволяет следующий код:
str = sprintf('%d',n)
Для генерации кода, сначала бросает n
к типу целого числа со знаком, такому как int8
.
str = sprintf('%d',int8(n))
Когда вы вызываете fprintf
со спецификатором целочисленного формата, тип целочисленного аргумента должен быть типом, который целевой компьютер может представлять как нативный тип C. Например, если вы вызываете fprintf('%d', int64(n))
, затем целевой компьютер должен иметь нативный тип C, который поддерживает 64-битное целое число.
Массивы GPU
Ускорьте код путем работы графического процессора (GPU) с помощью Параллельных вычислений Toolbox™.
Указания и ограничения по применению:
Эта функция принимает массивы GPU, но не работает на GPU.
Для получения дополнительной информации смотрите функции MATLAB Выполнения на GPU (Parallel Computing Toolbox).
Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Параллельных вычислений Toolbox™.
Указания и ограничения по применению:
Эта функция работает с распределенными массивами, но выполняет в клиенте MATLAB.
Для получения дополнительной информации смотрите функции MATLAB Выполнения с Распределенными Массивами (Parallel Computing Toolbox).
Представлено до R2006a
Была ли эта тема полезной?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.