Запишите данные к текстовому файлу
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, скаляре строки.
Оператор форматирования
Оператор форматирования запускается со знака процента, %
, и заканчивается символом преобразования. Символ преобразования требуется. Опционально, можно задать идентификатор, флаги, ширину поля, точность, и выделить подтипы в операторах между %
и символом преобразования. (Пробелы недопустимы между операторами и показаны здесь только для удобочитаемости).
Символ преобразования
Эта таблица показывает символы преобразования, чтобы отформатировать числовые и символьные данные как текст.
Тип значения | Преобразование | Детали |
---|---|---|
Целое число, подписанное |
| Основа 10 |
Целое число, без знака |
| Основа 10 |
| Базируйтесь 8 (восьмеричный) | |
| Основывайте 16 (шестнадцатеричных), строчных букв | |
| То же самое как | |
Число с плавающей запятой |
| Представление с фиксированной точкой (Используют оператор точности, чтобы задать количество цифр после десятичной точки.) |
| Экспоненциальное представление, такое как | |
| То же самое как | |
| Более компактный из | |
| Более компактный из | |
Символы или строки |
| Отдельный символ |
| Вектор символа или массив строк. Тип синтезируемого текста совпадает с типом |
Дополнительные операторы
Дополнительный идентификатор, флаги, ширина поля, точность и операторы подтипа далее задают формат синтезируемого текста.
Идентификатор
Порядок для обработки аргументов входного параметра функции. Используйте синтаксис
, где n$
n
представляет положения других входных параметров в вызове функции.
Пример: (' %3$s %2$s %1$s %2$s','A', 'B', 'C')
, распечатывает входные параметры,
'B'
, 'C'
можно следующим образом: C B B
.
Примечание: Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива от того входного параметра.
Флаги
| Лево-выровнять по ширине. |
| Всегда распечатывайте символ знака (+ или –) для любого числового значения. |
| Вставьте пробел перед значением. |
| Заполните к ширине поля нулями перед значением. |
| Измените выбранные числовые преобразования:
Пример 5. |
Ширина поля
Минимальное количество символов, чтобы распечатать. Оператор ширины поля может быть номером или звездочкой (*
), чтобы относиться к входному параметру.
Пример: Входные параметры (' %12d', intmax)
эквивалентны (' % *d', 12, intmax)
.
Функция заполняет к ширине поля пробелами перед значением, если в противном случае не задано флагами.
Точность
Для | Количество цифр справа от десятичной точки |
Для | Количество значительных цифр |
Оператор точности может быть номером или звездочкой (*
), чтобы относиться к аргументу.
Пример: Входные параметры (' %6.4f', пи)
эквивалентны (' % *.*f', 6, 4, пи)
.
Если вы задаете оператор точности для значений с плавающей точкой, который превышает точность входного типа числовых данных, результаты не могут совпадать с входными значениями к точности, которую вы задали. Результат зависит от вашего компьютерного оборудования и операционной системы.
Подтипы
Можно использовать оператор подтипа, чтобы распечатать значение с плавающей точкой как его восьмеричное, десятичное, или шестнадцатеричное значение. Оператор подтипа сразу предшествует символу преобразования. Эта таблица показывает преобразования, которые могут использовать подтипы.
Тип входного значения | Подтип и символ преобразования | Тип выходного значения |
---|---|---|
Число с плавающей запятой |
| С двойной точностью шестнадцатеричное, восьмеричное, или десятичное значение |
| Шестнадцатеричное, восьмеричное, или десятичное значение с одинарной точностью |
Текст прежде или после операторов форматирования
formatSpec
может также включать дополнительный текст перед знаком процента, %
, или после символа преобразования. Текст может быть:
Обычный текст, чтобы распечатать.
Специальные символы, которые вы не можете ввести как обычный текст. Эта таблица показывает, как представлять специальные символы в formatSpec
.
Специальный символ | Представление |
---|---|
Единственная кавычка |
|
Символ процента |
|
Наклонная черта влево |
|
Предупреждение |
|
Клавиша Backspace |
|
Перевод формата |
|
Новая строка |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, |
Пример: |
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, |
Пример: |
Известное поведение преобразований с операторами форматирования
Числовые преобразования распечатывают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, таким как текстовое преобразование для числового значения, 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.
Указания и ограничения по применению:
Параметр 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.
Для получения дополнительной информации смотрите функции MATLAB Выполнения на GPU (Parallel Computing Toolbox).
Указания и ограничения по применению:
Эта функция работает с распределенными массивами, но выполняет в клиенте MATLAB.
Для получения дополнительной информации смотрите функции MATLAB Выполнения с Распределенными Массивами (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.