Запись в Текстовые файлы Используя fprintf
В этом примере показано, как создать текстовые файлы, включая комбинации числовых и символьных данных и непрямоугольных файлов, с помощью низкоуровневого fprintf
функция.
fprintf
основан на его тезке в библиотеке ANSI® Standard C Library. However, 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®, требуют последовательности символа новой строки '\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
страница с описанием.