Как распечатать файл в другом файле в Matlab?

#matlab #file-io

#matlab #file-io

Вопрос:

Например, если у меня есть файл A.dat и B.dat и

A.у dat есть

1 2 3

4 5 6

7 8 9

и B.dat сначала файл пуст.

Как я могу (используя функции Matlab) открыть файл B.dat , распечатать A.dat его содержимое и распечатать другие записи, такие как

10 11 12

13 14 15

?

Я пытался

fileA=fopen('A.dat','r')

fileB=fopen('B.dat','w');

fprintf(fileB,fileA);

или

fprintf(fileB,fscanf(fileA));

или

fprintf(fileB,fscanf(fileA,'%s'));

но ничего не работает.

Ответ №1:

Вы, кажется, не понимаете, для чего используются функции. fprintf и fscanf , вероятно, это не то, что вы ищете (но может быть полезно).

Попробуйте использовать fread и fwrite вместо:

 dataA = fread(fileA)
fwrite(fileB, dataA)
  

Проверьте документацию по операциям с файлами по адресу http://www.mathworks.se/help/techdoc/ref/f16-5702.html#f16-14516

Ответ №2:

Вы должны уметь использовать fgets . fopen указывает идентификатор файла, а не информацию в файле, поэтому ваш первый пример не будет работать.

Предполагая, что ваш файл является текстовым (не двоичным), тогда для копирования файла должно сработать что-то вроде следующего

 fileA = fopen('A.dat','r');
fileB = fopen('B.dat', 'w');
while (line = fgets(fileA)) ~= -1
    fprintf(fileB, line);
end
fclose(fileA);
fclose(fileB);
  

fgets выдает вам целую строку (включая символы новой строки) из текстового файла.

Если ваш файл двоичный, то будет работать что-то вроде следующего

 fileA = fopen('A.dat', 'r');
fileB = fopen('B.dat', 'w');
AData = fread(fileA);
fwrite(fileB, AData);
  

Примечание: К сожалению, у меня нет matlab на этом компьютере, поэтому я не смог протестировать примеры.

Для получения дополнительной информации о различных файловых функциях matlab см.: http://www.mathworks.com/help/techdoc/ref/f16-5702.html#f16-14516

Комментарии:

1. Ну, я пытался, но не сработало. Попробовал несколько вариантов вашего кода. fileA = fopen(‘A.dat’,’r’); fileB = fopen(‘B.dat’, ‘w’); в то время как и(1,1) строка = fgets(fileA)); если (строка ~= -1) разрыв; fprintf(файл, строка); end fclose(fileA); fclose(fileB); Проблема в while (line = fgets(fileA)) ~= -1 . Пробовал, например: и тоже не сработало =//

2. Мой файл не является двоичным (его пробелы и числа), но он работает с вашим вторым кодом и кодом @kigurai.

3. Что ж, я проверю это, когда у меня будет возможность, но если вы разделите его, как вы сделали в своем комментарии, тогда вы захотите break , когда line == -1 не когда line ~= -1 , иначе у вас будет бесконечный цикл. fgets возвращает -1, когда он достигает конца файла. Вот почему я выполнял цикл до тех пор, пока строка не была равна -1. fread и fwrite также будут работать с текстовыми файлами, они просто скопируют файл в виде битов вместо текстовой формы. В общем, это затруднит изменение и добавление строк.

4. Спасибо. Я line==1 тоже пытался, но я написал неправильно выше. Спасибо за ваше время.