exponenta event banner

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

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

См. также

| |

Связанные темы