Запись данных в текстовый файл
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
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
— Идентификатор файла
(значение по умолчанию) | 2
| скалярИдентификатор файла в виде одного из следующего:
Идентификатор файла, полученный из fopen
.
1 для стандартного вывода (экран).
2 для стандартной погрешности.
Типы данных: double
formatSpec
— Формат выходных полейФормат выходных полей, заданных операторов форматирования использования. formatSpec
также может включать обычный текст и специальные символы.
Если formatSpec
включает буквенный текст, представляющий символы ESC, такие как \n
, затем fprintf
переводит символы ESC.
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
.
Примечание: Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива от того входного параметра.
Флаги
| Лево-выровнять по ширине. |
| Всегда распечатывайте символ знака (+ или –) для любого числового значения. |
| Вставьте пробел перед значением. |
'0' | Заполните к ширине поля нулями перед значением. |
| Измените выбранные числовые преобразования:
Пример:
|
Ширина поля
Минимальное количество символов, чтобы распечатать. Оператор ширины поля может быть номером или звездочкой (*
) относиться к входному параметру.
Когда вы задаете *
как оператор ширины поля, другие входные параметры должны обеспечить и ширину и значение, которое будет распечатано. Ширины и значения могут быть парами аргументов или парами в числовом массиве. С *
как оператор ширины поля, можно распечатать различные значения с различными ширинами.
Пример: входные параметры ('%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 |
|
Перевод формата |
|
Новая строка |
|
Возврат каретки |
|
Горизонтальная табуляция |
|
Вертикальная табуляция |
|
Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, |
Пример:
|
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, |
Пример:
|
Известное поведение преобразований с операторами форматирования
Числовые преобразования распечатывают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, таким как текстовое преобразование для числового значения, MATLAB заменяет заданное преобразование и использует %e
.
Примеры
преобразует
pi
к 3.141593e+00
.
Если вы применяете текстовое преобразование (любой %c
или %s
) к целочисленным значениям MATLAB преобразует значения, которые соответствуют кодам допустимого символа к символам.
Примеры
преобразует
[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] Керниган, B. W., и Д. М. Ричи, язык программирования C, второй выпуск, Prentice-Hall, Inc., 1988.
[2] Спецификация X3.159-1989 ANSI: “Язык программирования C”, ANSI, 1 430 Broadway, Нью-Йорк, NY 10018.
Указания и ограничения по применению:
formatSpec
параметр должен быть постоянным.
В formatSpec
, шестнадцатеричные числа должны быть в области значений [0 7F], и восьмеричные числа должны быть в области значений [0 177].
Если fileID
имеет постоянное значение 1
или 2
и внешние вызовы не возможны, генератор кода производит printf
C вызвать. Внешние вызовы не возможны, когда внешние вызовы отключены или когда
fprintf
называется внутри a parfor
цикл.
Поведение fprintf
в сгенерированном коде совпадает с поведением компилятора C вместо поведения MATLAB в этих случаях:
Спецификатор формата имеет соответствующий спецификатор формата C, например, %e
или %E
.
fprintf
вызов внутри a 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-битное целое число.
Указания и ограничения по применению:
Эта функция принимает массивы графического процессора, но не работает на графическом процессоре.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
Указания и ограничения по применению:
Эта функция работает с распределенными массивами, но выполняет в клиенте MATLAB.
Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.