Запись данных в файл
В случае, когда строка, записываемая в файл, представляет собой цепочку символов, она обязана подвергнуться преобразованию (форматированию) по двум следующим причинам:
· в оперативной памяти каждый символ представлен двумя байтами, а в файле — одним;
· для того чтобы отделить одну строку от другой, вслед за последним символом на диск должна быть записана пара управляющих кодов.
На самом деле символьная информация обычно перемежается с числовыми данными, которые должны быть тем или иным способом преобразованы из машинного формата в соответствующие поля строки. Таким конвертированием данных из их внутреннего представления в символьное заведуют форматные указатели, задаваемые в качестве одного из параметров функции 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).Завершается указатель одним из символов, характеризующих тип преобразования данных.
Символ формата |