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.txt
Exponential 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.txt
Exponential 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.txt
This 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.txt
This 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
страница с описанием.