Запись данных в текстовый файл
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 ® Notepad, используйте'\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.txtx 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 включает литеральный текст, представляющий escape-символы, например, \n, то fprintf переводит символы escape.
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 |
|
Веб-канал формы |
|
Новая линия |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Юникода ® которого может быть представлено шестнадцатеричным числом , |
Пример:
|
Символ, числовое значение Юникода которого может быть представлено восьмеричным числом, |
Пример:
|
Заметное поведение преобразований с операторами форматирования
Числовые преобразования печатают только действительную составляющую комплексных чисел.
Если указано преобразование, которое не соответствует данным, например преобразование текста для числового значения, 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] Керниган, Б. У., и Д. М. Ричи, язык программирования Си, второе издание, Prentice-Hall, Inc., 1988.
[2] Спецификация ANSI X3.159-1989: «Язык программирования C», ANSI, 1430 Broadway, New York, NY 10018.
Примечания и ограничения по использованию:
formatSpec параметр должен быть постоянным.
В formatSpecшестнадцатеричные числа должны находиться в диапазоне [0 7F], а восьмеричные числа - в диапазоне [0 177].
Если fileID имеет постоянное значение, равное 1 или 2 и внешние вызовы невозможны, генератор кода производит C printf звоните. Внешние вызовы невозможны, когда внешние вызовы отключены или когда 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 на графическом процессоре (панель инструментов параллельных вычислений).
Примечания и ограничения по использованию:
Эта функция работает на распределенных массивах, но выполняется в клиенте MATLAB.
Дополнительные сведения см. в разделе Запуск функций MATLAB с распределенными массивами (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.