Запись данных в файл

В случае, когда строка, записываемая в файл, представляет собой цепочку символов, она обязана подвергнуться преобразованию (форматированию) по двум следующим причинам:

· в оперативной памяти каждый символ представлен двумя байтами, а в файле — одним;

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

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

'f_id=fopen('text.txt', 'wt'); % открыли текстовый файл c1=fprintf (f_id,'%s\n','ABCD') % вывели в файл строку

C1=

>>fclose(f_id);

Форматные указатели всегда начинаются с символа %. В приведенном примере такой указатель один — %s, и он означает, что перед записью на диск необходимо преобразовать строку ABCD, занимающую в оперативной памяти 8 байтов. Управляющая комбинация '\n’, следующая за форматным указателем, записывается в файл как признак конца строки.

Первый входной аргумент функции fprintf задает номер открытого файла. Им, в частности, может быть число 1, и тогда данные передаются в файл стандартного вывода, т. е. в командное окно:

» fprintf(1,'%s\n','ABCD'); ABCD

Второй входной аргумент функции fprintf представлен строкой, содержащей форматные указатели и так называемые литеральные константы. К последним относятся все символы, не принадлежащие к форматным указателям. Количество указателей может не соответствовать количеству преобразуемых данных. И этим MATLAB кординально отличается о других систем программирования. Если длина списка форматных указателей меньше, чем количество преобразуемых данных, то список цикдически повторяется

>> fprintf (' %4d',l,2,3,4)

1 2 3 4

Если количество указателей формата превышает длину выводимого списка, то лишние форматные указатели игнорируются:

>> fprintf (' %d %f %e',l,2)

1 2.000000

Данные, подлежащие преобразованию перед записью в файл, задаются третьим и последующими входными аргументами функции fprintf. Например, если мы хотим записать в очередную строку текстового файла два целых и одно вещественное значения переменных il, i2 и r3, то это может выглядеть так.

» i1=125;

» i2=2003;

» гЗ=2.3456;

» fprintf('%5d %d %8.3f\n',il,i2,r3);

125 2003 2.346

Значение переменной il преобразуется в формат целого числа (об этом сви­детельствует буква d в первом форматном указателе), и для его записи в вы­водной строке отводится 5 позиций. Между первым и вторым форматными зателями находится один пробел, который считается литеральной константой, разделяющей первое и второе число. Значение переменной i2 преобразуется по формату %d и занимает в выводной строке 4 позиции. После второго числа вставляется еще один литеральный пробел, расположенный между вторым и третьим указателями формата. Следующие 8 позиций отведены для результата преобразования вещественного числа (об этом свидетельствует буква f в третьем форматном указателе), у которого сохраняются 3 значащие цифры в дробной части. Обратите внимание на то, что результат преобразования третьего числа округлен в соответствии с общепринятыми правилами.

Указатель формата начинается с символа %, вслед за которым могут быть расположены три необязательные компонента – флажки, ширина(w) и точность (.n).Завершается указатель одним из символов, характеризующих тип преобразования данных.

Символ формата