Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Форматные преобразования sprintf, sscanf.






Преобразование списка данных (a1, a2, …) по формату fmt с записью результата в строку s выполняется с помощью функции sprintf:

[s]=sprintf(fmt, a1, a2,...)

 

Строка формата fmt задает формат преобразования, состоящий из спецификаций, начинающихся с символа % (процент), и набора литерных символов, переносимых безо всяких изменений из строки формата в результат.

Таблица 1.9.1. Краткие сведения о символах-спецификаторах.

Спецификатор Формат результата
%c Единственный символ
%d Целое десятичное число со знаком
%e Вещественное число в форме с плавающей точкой (порядок идентифицирует буква «e»)
%E Вещественное число в форме с плавающей точкой (порядок идентифицирует буква «E»)
%f Вещественное число в форме с фиксированной точкой
%g Компактная форма числа с фиксированной или плавающей точкой
%G Компактная форма числа с фиксированной или плавающей точкой
%s Строка символов
%u Целое десятичное число без знака

Спецификаторы %d и %u имеет смысл применять к целочисленным значениям, причем если соответствующий элемент списка не является целым числом, то MATLAB заменяет целочисленную спецификацию на формат вещественного числа.

Все символы, включенные в состав строки fmt и не относящиеся к форматным спецификациям, являются литералами, которые без изменения переносятся в результирующую строку. Среди литералов могут присутствовать управляющие символы, представленные в таблице 1.9.2, запись которых осуществляется согласно правилам языка программирования C.

Таблица 1.9.2. Краткие сведения об управляющих символах.

Символ Назначение
\b Удаление предшествующего символа (Backspace)
\f Перевод страницы (Form feed)
\n Перевод строки (New line)
\r Возврат каретки (Carriage return)
\t Горизонтальная табуляция (Horizontal tab)
\\ Обратная косая черта (Backslash)
\'' Одинарная кавычка (')
%% Процент (%)

Приведем ниже несколько примеров форматного вывода данных в системе MATLAB (например, в режиме командной строки):

> > sprintf('%-7d %+7d %07d', 12345, 12345, 12345) ans = 12345 +12345 0012345 > > sprintf('% d', 12345) ans = > > sprintf('% d', -12345) ans = -12345 > > sprintf('%10.6f', pi) ans = 3.141593 > > sprintf('%9.5f', pi) ans = 3.14159 > > sprintf('%d', pi) ans = 3.141593e+00 > > sprintf('Число пи=%10.8f', pi) ans = Число пи=3.14159265

Обратная операция по извлечению данных из строки s, сформированной функцией sprintf, выполняется с помощью функции sscanf:

A=sscanf(s, fmt)

Такой вариант вызова обеспечивает выборку всех данных и их обратное преобразование из символьного представления в машинное в соответствии с форматными указателями строки fmt. Форматные спецификации в данном случае те же самые, что и при преобразовании в строку.

Среди дополнительных средств управления форматом следует выделить перечисленные ниже:

– использование флажка, задаваемого символом «*», обеспечивающего пропуск очередного данного в строке s;

– использование форматов %hd, %ld и %lg, позволяющих преобразовать

извлекаемое число в машинный код короткого целого (%hd), длинного целого (%ld) или вещественного числа двойной точности (%lg);

– использование формата %[s1s2...], обеспечивающего извлечение только тех символов из строки s, которые перечислены в квадратных скобках;

– использование формата %[^s1s2...], обеспечивающего извлечение только тех символов из строки s, которые не перечислены в квадратных скобках.

Приведем характерный пример (например, в режиме командной строки):

> > s='2.7183 3.1416'; > > A=sscanf(s, '%f') A = 2.7183 3.1416

Заметим, что при прямом преобразовании в строку для массива A также требовалась лишь одна спецификация формата:

> > s1=sprintf('%f ', A) s1 = 2.718300 3.141600

Следует отметить использование литерального пробела в формате. Без него оба числовых значения оказались бы «склеенными», и для их разделения потребовались бы определенные усилия.

> > s1=sprintf('%f', A) s1 = 2.7183003.141600

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал