MATLAB: как вставить строку текста в начале файла?

У меня есть файл, полный данных ascii. Как добавить строку в первую строку файла? Я не могу найти такую функциональность с помощью fopen (кажется, она добавляется только в конце и ничего больше.)

3 ответов


Вариант 1:

Я бы предложил вызов некоторых системных команд из MATLAB. Одна из возможностей Windows-записать новую строку текста в свой собственный файл, а затем использовать DOS на команда to объединить два файла. Вот как будет выглядеть вызов в MATLAB:

!for %f in ("file1.txt", "file2.txt") do type "%f" >> "new.txt"

я использовал ! (bang) оператор для вызова команды из MATLAB. Команда выше последовательно выводится содержимое " file1.txt " и " file2.txt "в Файл" Новый.формат txt." Имейте в виду, что вам, вероятно, придется закончить первый файл новым символом строки, чтобы правильно добавить вещи.

Другой альтернативой приведенной выше команде будет:

!for %f in ("file2.txt") do type "%f" >> "file1.txt"

который добавляет содержимое " file2.txt " to " file1.txt", в результате чего " file1.txt", содержащий объединенный текст вместо создания нового файла.

если у вас есть свой имена файлов в строках, вы можете создать команду в виде строки и использовать система вместо ! оператора. Например:

a = 'file1.txt';
b = 'file2.txt';
system(['for %f in ("' b '") do type "%f" >> "' a '"']);

Вариант 2:

одно только решение MATLAB, в дополнение к AMRO в, is:

dlmwrite('file.txt',['first line' 13 10 fileread('file.txt')],'delimiter','');

использует FILEREAD чтобы прочитать содержимое текстового файла в строку, объедините новую строку ,которую вы хотите добавить (вместе с ASCII-коды для перевозки возврат и подача строки / новая строка), затем перезаписывает исходный файл с помощью DLMWRITE.

Я чувствую, что опция #1 может работать быстрее, чем это чистое решение MATLAB для огромных текстовых файлов, но я не знаю этого наверняка. ;)


следующее является чистым решением MATLAB:

% write first line
dlmwrite('output.txt', 'string 1st line', 'delimiter', '')
% append rest of file
dlmwrite('output.txt', fileread('input.txt'), '-append', 'delimiter', '')
% overwrite on original file
movefile('output.txt', 'input.txt')

как насчет использования frewind(fid) функция, чтобы взять указатель на начало файла?

у меня было аналогичное требование и попытался frewind() приняты fprintf() заявление.

но, предупреждение: он будет перезаписывать в зависимости от того, что является 1-й строкой. Поскольку в моем случае я был тем, кто писал файл, я поместил фиктивные данные в начале файла, а затем в конце, пусть это будет перезаписано после операций, указанных выше.

кстати, даже я столкнувшись с одной проблемой с этим решением, что, в зависимости от длины(/размера) фиктивных данных и фактических данных, программа либо оставляет часть фиктивных данных на одной строке, либо приносит мои новые данные во 2-ю строку.. Любой совет в этом отношении высоко ценится.