fprintfВ этом примере показано, как создавать текстовые файлы, включая комбинации числовых и символьных данных и непрямоугольные файлы, с использованием низкоуровневого fprintf функция.
fprintf основан на его тезке в библиотеке ANSI ® Standard C. Однако MATLAB ® использует векторизированную версию fprintf записывает данные из массива с минимальными контурами управления.
Открыть файл
Создать образец матрицы y с двумя рядами.
x = 0:0.1:1; y = [x; exp(x)];
Открыть файл для записи с помощью fopen и получить идентификатор файла, fileID. По умолчанию fopen открывает файл для доступа только для чтения, поэтому необходимо указать разрешение на запись или добавление, например 'w' или 'a'.
fileID = fopen('exptable.txt','w');
Запись в файл
Запишите заголовок, а затем пустую строку с помощью fprintf функция. Для перехода к новой строке в файле используйте '\n'.
fprintf(fileID, 'Exponential Function\n\n');Примечание.Для некоторых текстовых редакторов Windows ®, включая Microsoft ® Notepad, требуется новая последовательность символов: '\r\n' вместо '\n'. Однако '\n' достаточно для Microsoft Word или WordPad.
Запишите значения в y в порядке столбцов, чтобы два значения появлялись в каждой строке файла. fprintf преобразует числа или символы во входах массива в текст в соответствии с заданными параметрами. Определить '%f' для печати чисел с плавающей запятой.
fprintf(fileID,'%f %f\n',y);Другие распространенные спецификаторы преобразования включают '%d' для целых чисел или '%s' для символов. fprintf повторно применяет информацию преобразования для циклического просмотра всех значений входных массивов в порядке столбцов.
Закройте файл с помощью fclose когда закончите писать.
fclose(fileID);
Просмотр содержимого файла с помощью type функция.
type exptable.txtExponential Function 0.000000 1.000000 0.100000 1.105171 0.200000 1.221403 0.300000 1.349859 0.400000 1.491825 0.500000 1.648721 0.600000 1.822119 0.700000 2.013753 0.800000 2.225541 0.900000 2.459603 1.000000 2.718282
Дополнительные параметры форматирования
При необходимости включите дополнительную информацию в вызов fprintf для описания ширины поля, точности или порядка выходных значений. Например, укажите ширину поля и количество цифр справа от десятичной точки в экспоненциальной таблице.
fileID = fopen('exptable_new.txt', 'w'); fprintf(fileID,'Exponential Function\n\n'); fprintf(fileID,'%6.2f %12.8f\n', y); fclose(fileID);
Просмотрите содержимое файла.
type exptable_new.txtExponential Function 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
В этом примере показано, как добавлять значения в существующий текстовый файл, переписывать весь файл и перезаписывать только часть файла.
По умолчанию fopen открывает файлы с доступом для чтения. Чтобы изменить тип доступа к файлу, используйте спецификатор разрешений в вызове fopen. Возможные спецификаторы разрешений:
'r' для чтения
'w' для записи, отбрасывания любого существующего содержимого файла
'a' для добавления в конец существующего файла
Чтобы открыть файл как для чтения, так и для записи или добавления, приложите к разрешению знак «плюс», например 'w+' или 'a+'. При открытии файла для чтения и записи необходимо вызвать fseek или frewind между операциями чтения и записи.
Добавить в существующий текстовый файл
Создание файла с именем changing.txt.
fileID = fopen('changing.txt','w'); fmt = '%5d %5d %5d %5d\n'; fprintf(fileID,fmt, magic(4)); fclose(fileID);
Текущее содержимое changing.txt являются:
16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
Откройте файл с разрешением на добавление.
fileID = fopen('changing.txt','a');
Запишите значения [55 55 55 55] в конце файла:
fprintf(fileID,fmt,[55 55 55 55]);
Закройте файл.
fclose(fileID);
Просмотр содержимого файла с помощью type функция.
type changing.txt 16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
55 55 55 55
Перезаписать весь текстовый файл
Текстовый файл состоит из непрерывного набора символов, включая символы новой строки. Чтобы заменить строку файла другим числом символов, необходимо переписать строку, которую требуется изменить, и все последующие строки в файле.
Заменить первую строку changing.txt с более длинным, описательным текстом. Так как изменение относится к первой строке, перезаписайте весь файл.
replaceLine = 1; numLines = 5; newText = 'This file originally contained a magic square'; fileID = fopen('changing.txt','r'); mydata = cell(1, numLines); for k = 1:numLines mydata{k} = fgetl(fileID); end fclose(fileID); mydata{replaceLine} = newText; fileID = fopen('changing.txt','w'); fprintf(fileID,'%s\n',mydata{:}); fclose(fileID);
Просмотрите содержимое файла.
type changing.txtThis file originally contained a magic square
2 11 7 14
3 10 6 15
13 8 12 1
55 55 55 55
Перезаписать часть текстового файла
Замените третью строку файла changing.txt на [33 33 33 33]. Если вы хотите заменить часть текстового файла точно таким же количеством символов, не нужно переписывать другие строки в файле.
replaceLine = 3;
myformat = '%5d %5d %5d %5d\n';
newData = [33 33 33 33];Переместите маркер положения файла в правильную строку.
fileID = fopen('changing.txt','r+'); for k=1:(replaceLine-1); fgetl(fileID); end
Звонить fseek между операциями чтения и записи.
fseek(fileID,0,'cof');
fprintf(fileID, myformat, newData);
fclose(fileID);Просмотрите содержимое файла.
type changing.txtThis file originally contained a magic square
2 11 7 14
33 33 33 33
13 8 12 1
55 55 55 55
Схемы кодирования поддерживают символы, необходимые для определенных алфавитов, например для японского или европейского языков. Общие схемы кодирования включают в себя US-ASCII или UTF-8.
Если при открытии файла для чтения не указана схема кодирования, fopen использует автоматическое обнаружение набора символов для определения кодировки. Если при открытии файла для записи не указана схема кодирования, fopen по умолчанию используется UTF-8 для обеспечения совместимости между всеми платформами и языками без потери или повреждения данных.
Чтобы определить значение по умолчанию, откройте файл и вызовите fopen снова с синтаксисом:
[filename, permission, machineformat, encoding] = fopen(fid);
Если при открытии файла задана схема кодирования, к этой схеме применяются следующие функции: fscanf, fprintf, fgetl, fgets, fread, и fwrite.
Полный список поддерживаемых схем кодирования и синтаксис для указания кодировки см. в разделе fopen справочная страница.