exponenta event banner

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.

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.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, должен быть напечатан в виде текста.

Входные аргументы

свернуть все

Идентификатор файла, указанный как один из следующих:

  • Идентификатор файла, полученный из fopen.

  • 1 для стандартного вывода (экран).

  • 2 для стандартной ошибки.

Типы данных: double

Формат выходных полей, заданный с помощью операторов форматирования. formatSpec также может включать обычный текст и специальные символы.

Если formatSpec включает литеральный текст, представляющий escape-символы, например, \n, то fprintf переводит символы escape.

formatSpec может быть символьным вектором в одиночных кавычках или, начиная с R2016b, строковым скаляром.

Оператор форматирования

Оператор форматирования начинается со знака процента, %, и заканчивается символом преобразования. Требуется символ преобразования. При необходимости можно указать идентификатор, флаги, ширину поля, точность и операторы подтипа между % и символ преобразования. (Пробелы между операторами недопустимы и отображаются здесь только для удобства чтения).

Символ преобразования

В этой таблице показаны символы преобразования для форматирования числовых и символьных данных в виде текста.

Тип значенияПреобразованиеПодробнее

Целое число, с подписью

%d или %i

База 10

Целое число, без знака

%u

База 10

%o

Основание 8 (восьмеричное)

%x

База 16 (шестнадцатеричная), строчные буквы af

%X

То же, что и %x, прописные буквы AF

Число с плавающей запятой

%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') печать входных аргументов 'A', 'B', 'C' следующим образом: C B A B.

    Примечание.Если входной аргумент является массивом, нельзя использовать идентификаторы для указания конкретных элементов массива из этого входного аргумента.

  • Флаги

    '–'

    Выравнивание слева.
    Пример: %-5.2f
    Пример: %-10s

    '+'

    Всегда печатайте знак (+ или -) для любого числового значения.
    Пример: %+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).

    Пример: Входные аргументы ('%*d',[2 10 5 100]) вернуть '10 100', с двумя помещениями, выделенными для 10 и пять пробелов для 100. В качестве альтернативы можно также указать ширину поля и значения в виде нескольких аргументов, как в ('%*d',2,10,5,100).

    Если флажками не указано иное, то панели функций преобразуются в поля с пробелами перед значением.

  • Точность

    Для %f, %e, или %E

    Число цифр справа от десятичной запятой
    Пример: '%.4f' отпечатки pi как '3.1416'

    Для %g или %G

    Количество значащих цифр
    Пример: '%.4g' отпечатки pi как '3.142'

    Оператор точности может быть числом или звездочкой (*) для ссылки на аргумент.

    При указании * в качестве оператора точности поля другие входные аргументы должны обеспечивать и точность, и значение для печати. Уточнения и значения могут быть парами аргументов или парами в числовом массиве. С * в качестве оператора точности можно печатать различные значения в различных точностях.

    При указании *.* в качестве операторов ширины поля и точности необходимо указать ширину поля, точность и значения в виде триплетов.

    Пример: Входные аргументы ('%.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).

    Примечание

    Если указать оператор точности для значений с плавающей запятой, превышающих точность входного числового типа данных, результаты могут не соответствовать введенным значениям указанной точности. Результат зависит от оборудования компьютера и операционной системы.

  • Подтипы

    Оператор подтипа можно использовать для печати значения с плавающей запятой в виде восьмеричного, десятичного или шестнадцатеричного значения. Оператор подтипа непосредственно предшествует символу преобразования. В этой таблице показаны преобразования, которые могут использовать подтипы.

    Тип входного значения

    Подтип и символ преобразования

    Тип выходного значения

    Число с плавающей запятой

    %bx или %bX
    %bo
    %bu

    Шестнадцатеричное, восьмеричное или десятичное значение с двойной точностью
    Пример: %bx отпечатки pi как 400921fb54442d18

    %tx или %tX
    %to
    %tu

    Шестнадцатеричное, восьмеричное или десятичное значение с одинарной точностью
    Пример: %tx отпечатки pi как 40490fdb

Текст до или после операторов форматирования

formatSpec может также включать дополнительный текст перед знаком процента, %или после символа преобразования. Текст может быть следующим:

  • Обычный текст для печати.

  • Специальные символы, которые нельзя вводить как обычный текст. В этой таблице показано, как представлять специальные символы в formatSpec.

    Специальный символ

    Представление

    Одинарная кавычка

    ''

    Процент символа

    %%

    Обратная косая черта

    \\

    Тревога

    \a

    Клавиша Backspace

    \b

    Веб-канал формы

    \f

    Новая линия

    \n

    Возврат каретки

    \r

    Горизонтальная вкладка

    \t

    Вертикальная вкладка

    \v

    Символ, числовое значение Юникода ® которого может быть представлено шестнадцатеричным числом ,N

    \xN

    Пример: sprintf('\x5A') прибыль 'Z'

    Символ, числовое значение Юникода которого может быть представлено восьмеричным числом, N

    \N

    Пример: sprintf('\132') прибыль 'Z'

Заметное поведение преобразований с операторами форматирования

  • Числовые преобразования печатают только действительную составляющую комплексных чисел.

  • Если указано преобразование, которое не соответствует данным, например преобразование текста для числового значения, MATLAB переопределяет указанное преобразование и использует %e.

    Пример: '%s' новообращенные pi кому 3.141593e+00.

  • При применении преобразования текста (либо %c или %s) в целочисленные значения, MATLAB преобразует значения, соответствующие допустимым кодам символов, в символы.

    Пример: '%s' новообращенные [65 66 67] кому ABC.

Числовые или символьные массивы, заданные как скаляр, вектор, матрица или многомерный массив.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

Выходные аргументы

свернуть все

Количество байтов, 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.

Расширенные возможности

.
Представлен до R2006a