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

Запись в текстовые файлы с использованием 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 страница с описанием.

См. также

| |

Похожие темы