#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
тоже пытался, но я написал неправильно выше. Спасибо за ваше время.