Запись данных в текстовый файл
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
%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
.
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
The 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
включает буквенные тексты, представляющие побочные символы, такие как \n
, затем fprintf
преобразует символы побега.
formatSpec
может быть вектор символов в одинарных кавычках или, начиная с R2016b, строковым скаляром.
Оператор форматирования
Оператор форматирования начинается со знака процента %
, и заканчивается символом преобразования. Требуется символ преобразования. Вы также можете задать идентификатор, флаги, ширину поля, точность и операторы подтипа между %
и символ преобразования. (Пространства недопустимы между операторами и показаны здесь только для читаемости).
Символ преобразования
В этой таблице показаны символы преобразования в форматирование числовых и символьных данных в виде текста.
Тип значения | Преобразование | Подробнее |
---|---|---|
Целое число, со знаком |
| Основа 10 |
Целое число, без знака |
| Основа 10 |
| База 8 (октальная) | |
| База 16 (шестнадцатеричная), строчные буквы | |
| То же, что и | |
Число с плавающей запятой |
| Обозначение с фиксированной точкой (Используйте оператор точности, чтобы задать количество цифр после десятичной точки.) |
| Экспоненциальное обозначение, такое как | |
| То же, что и | |
| Чем компактнее | |
| Чем компактнее | |
Символы или строки |
| Один символ |
| Вектор символов или строковые массивы. Тип выходного текста совпадает с типом |
Необязательные операторы
Необязательный идентификатор, флаги, ширина поля, точность и операторы подтипа дополнительно определяют формат выходного текста.
Идентификатор
Порядок обработки входных аргументов функции. Используйте синтаксис
, где n
$n
представляет положения других входных параметров в вызове функции.
Пример:
('%3$s %2$s %1$s %2$s','A','B','C')
печатает входные параметры 'A'
, 'B'
, 'C'
следующим образом: C B A B
.
Примечание.Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива из этого входного параметра.
Флаги
| Слева-оправдать. |
| Всегда печатайте символ (+ или -) для любого числового значения. |
| Вставьте пространство перед значением. |
| Заполните до ширины поля нулями перед значением. |
| Измените выбранные числовые преобразования:
Пример:
|
Ширина поля
Минимальное количество символов для печати. Оператор ширины поля может быть числом или звездочкой (*
) для ссылки на входной параметр.
Когда вы задаете *
как оператор ширины поля, другие входные параметры должны обеспечивать и ширину, и значение, которое должно быть напечатано. Ширина и значения могут быть парами аргументов или парами в числовом массиве. С *
как оператор ширины поля, можно печатать различные значения с различными ширинами.
Пример: Входные параметры ('%12d',intmax)
эквивалентны ('%*d',12,intmax)
.
Пример: Входные параметры ('%*d',[2 10 5 100])
возврат '10 100'
, с двумя пространствами, выделенными для 10
и пять пространств для 100
. В качестве альтернативы можно также задать ширины и значения полей как несколько аргументов, как в ('%*d',2,10,5,100)
.
Функция заполняет поле шириной пространств перед значением, если иное не задано флагами.
Точность
Для | Количество цифр справа от десятичной точки |
Для | Количество значащих цифр |
Оператор точности может быть числом или звездочкой (*
) для ссылки на аргумент.
Когда вы задаете *
как оператор точности поля, другие входные параметры должны обеспечивать и точность, и значение, которое должно быть напечатано. Точности и значения могут быть парами аргументов или парами в числовом массиве. С *
как оператор точности, вы можете печатать различные значения к различным точностям.
Когда вы задаете *.*
как ширина поля и операторы точности, необходимо задать ширины поля, точности и значения как триплеты.
Пример: Входные параметры ('%.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)
.
Примечание
Если вы задаете оператор точности для значений с плавающей точкой, который превышает точность входного типа числовых данных, результаты могут не совпадать с заданной точностью. Результат зависит от оборудования компьютера и операционной системы.
Подтипы
Можно использовать оператор подтипа, чтобы напечатать значение с плавающей точкой как его восьмеричное, десятичное или шестнадцатеричное значение. Оператор подтипа непосредственно предшествует символу преобразования. В этой таблице показаны преобразования, которые могут использовать подтипы.
Вход значения | Подтип и символ преобразования | Выход значения |
---|---|---|
Число с плавающей запятой |
| Шестнадцатеричное, восьмеричное или десятичное значение двойной точности |
| Шестнадцатеричное, восьмеричное или десятичное значение с одной точностью |
Текст до или после операторов форматирования
formatSpec
может также включать дополнительный текст перед знаком процента, %
, или после символа преобразования. Текст может быть:
Обычный текст для печати.
Специальные символы, которые вы не можете ввести как обычный текст. В этой таблице показано, как представлять специальные символы в formatSpec
.
Специальный символ | Представление |
---|---|
Одинарная кавычка |
|
Процент символа |
|
Обратная косая черта |
|
Тревога |
|
Клавиша Backspace |
|
Подача формы |
|
Новая линия |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, чей Юникод® числовое значение может быть представлено шестнадцатеричным числом, |
Пример:
sprintf('\x5A') |
Символ, числовое значение в Юникоде которого может быть представлено восьмеричным числом |
Пример:
sprintf('\132') |
Заметное поведение преобразований с операторами форматирования
Числовые преобразования печатают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, такое как преобразование текста для числового значения, MATLAB переопределяет заданное преобразование и использует %e
.
Пример:
'%s' преобразует
pi
на 3.141593e+00
.
Если вы применяете преобразование текста (либо %c
или %s
) в целочисленные значения, MATLAB преобразует значения, которые соответствуют допустимым символьным кодам, в символы.
Пример:
'%s' преобразует
[65 66 67]
на ABC
.
A1,...,An
- Числовые или символьные массивыЧисловые или символьные массивы, заданный как скаляр, вектор, матрица или многомерный массив.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
nbytes
- Количество байтовКоличество байтов, которые fprintf
пишет, возвращается как скаляр. При записи в файл nbytes
определяется кодировкой символов. При печати данных на экран nbytes
- количество символов, отображаемых на экране.
Спецификаторы формата для функций чтения sscanf
и fscanf
отличаются от форматов функций записи sprintf
и fprintf
. Функции считывания не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.
Если вы задаете недопустимый оператор форматирования или специальный символ, то fprintf
печатает весь текст до недопустимого оператора или символа и отбрасывает остальное.
Пример: Если formatSpec
является 'value = %z'
, затем fprintf
печатает 'value ='
потому что %z
не является оператором форматирования.
Пример: Если formatSpec
является 'character \x99999 = %s'
, затем fprintf
печатает 'character'
потому что \x99999
не является допустимым специальным символом.
[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice Hall, Inc., 1988.
[2] Спецификация ANSI X3.159-1989: «Programming Language C», ANSI, 1430 Broadway, New York, NY 10018.
Указания и ограничения по применению:
The formatSpec
параметр должен быть постоянным.
В formatSpec
шестнадцатеричные числа должны быть в области значений [0 7F], а восьмеричные - в области значений [0 177].
Если fileID
имеет постоянное значение 1
или 2
и внешние вызовы невозможны, генератор кода производит printf C
вызов. Внешние вызовы невозможны, когда внешние вызовы отключены или когда fprintf
вызывается внутри parfor
цикл.
Поведение fprintf
в сгенерированном коде соответствует поведению компилятора C вместо поведения MATLAB в следующих случаях:
Спецификатор формата имеет соответствующий спецификатор формата C, например %e
или %E
.
fprintf
вызов находится внутри parfor
цикл.
Внешние вызовы отключены.
Эти опции и возможности не поддерживаются:
The n$
позиционный идентификатор для переупорядочивания входных значений
Печатные массивы
Использование подтипов для печати числа с плавающей запятой в виде восьмеричного, десятичного или шестнадцатеричного значения
Когда вы звоните fprintf
со спецификатором формата %s
, вы не можете поместить символ null в середине входного вектора символов. Чтобы записать символ null, используйте fprintf(fid, '%c', char(0))
.
Типы входных параметров должны совпадать с типами форматов. Для примера, если n
является double, генерация кода не позволяет использовать следующий код:
str = sprintf('%d',n)
Для генерации кода сначала приведите n
к подписанному целому типу, такому как int8
.
str = sprintf('%d',int8(n))
Когда вы звоните fprintf
с целочисленным спецификатором формата, тип целочисленного аргумента должен быть типом, который целевой компьютер может представлять как собственный тип C. Для примера, если вы звоните fprintf('%d', int64(n))
, тогда целевой компьютер должно иметь собственный тип C, который поддерживает 64-разрядное целое число.
Указания и ограничения по применению:
Эта функция принимает массивы GPU, но не запускается на графическом процессоре.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
Указания и ограничения по применению:
Эта функция работает с распределенными массивами, но выполняется в клиентском MATLAB.
Для получения дополнительной информации смотрите Запуск функций MATLAB с распределенными массивами (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.