Экспорт в текстовые файлы данных с низкоуровневым вводом-выводом

Запись в Текстовые файлы Используя 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 снова с синтаксисом:

[filename, permission, machineformat, encoding] = fopen(fid);

Если вы задаете схему кодирования, когда вы открываете файл, следующие функции применяют ту схему: fscanf, fprintf, fgetl, fgets, fread и fwrite.

Для полного списка поддерживаемых схем кодирования и синтаксиса для определения кодирования, смотрите страницу с описанием fopen.

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте