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

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

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

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

| |

Похожие темы