Как я могу записать строки и матрицы в файл .txt в MATLAB? - PullRequest
9 голосов
/ 29 декабря 2010

Мне нужно записать данные в файл .txt в MATLAB. Я знаю, как писать строки (fprintf) или матрицы (dlmwrite), но мне нужно что-то, что может сделать их обоих. Я приведу пример ниже:

str = 'This is the matrix: ' ;
mat1 = [23 46 ; 56 67] ;
%fName
if *fid is valid* 
    fprintf(fid, '%s\n', str)
    fclose(fid)
end
dlmwrite(fName, *emptymatrix*, '-append', 'delimiter', '\t', 'newline','pc')
dlmwrite(fName, mat1, '-append', 'newline', 'pc')

Это работает нормально, но с проблемой. Первая строка файла:

This is the matrix: 23,46

Что не то, что я хочу. Я хочу видеть:

This is the matrix:
23 46
56 67

Как я могу решить это? Я не могу использовать цикл for и printf решение, так как данные огромны, а время - проблема.

Ответы [ 4 ]

24 голосов
/ 29 декабря 2010

Я думаю, что все, что вам нужно сделать, чтобы решить вашу проблему, это добавить возврат каретки (\r) к вашему выражению FPRINTF и удалить первый вызов DLMWRITE :

str = 'This is the matrix: ';      %# A string
mat1 = [23 46; 56 67];             %# A 2-by-2 matrix
fName = 'str_and_mat.txt';         %# A file name
fid = fopen(fName,'w');            %# Open the file
if fid ~= -1
  fprintf(fid,'%s\r\n',str);       %# Print the string
  fclose(fid);                     %# Close the file
end
dlmwrite(fName,mat1,'-append',...  %# Print the matrix
         'delimiter','\t',...
         'newline','pc');

И вывод в файле выглядит так (с табуляцией между цифрами):

This is the matrix: 
23  46
56  67


ПРИМЕЧАНИЕ: Краткое объяснение ... причина необходимости \r в операторе FPRINTF заключается в том, что терминатор строки ПК состоит из возврата каретки с последующим переводом строки, это то, что используется DLMWRITE , когда указана опция 'newline','pc'. \r необходим для того, чтобы первая строка матрицы отображалась в новой строке при открытии выходного текстового файла в Блокноте.

5 голосов
/ 29 декабря 2010

Вам не нужен пустой вызов матрицы.Попробуйте этот код:

str = 'This is the matrix: ' ;
mat1 = [23 46 ; 56 67] ;
fName = 'output.txt';
fid = fopen('output.txt','w');
if fid>=0
    fprintf(fid, '%s\n', str)
    fclose(fid)
end
dlmwrite(fName, mat1, '-append', 'newline', 'pc', 'delimiter','\t');
2 голосов
/ 29 декабря 2010

У вас есть два вызова dlmwrite (), первый в пустой матрице, а во втором отсутствует опция «разделитель».Что произойдет, если вы добавите его ко второму звонку?

1 голос
/ 03 марта 2016

Я столкнулся с подобной ситуацией, добавляя заголовок в CSV. Вы можете использовать dlmwrite с -append, чтобы добавить одну строку, установив разделитель равным '', как показано ниже.

str = 'This is the matrix: ';      %# A string
mat1 = [23 46; 56 67];             %# A 2-by-2 matrix
fName = 'str_and_mat.txt';         %# A file name
header1 = 'A, B'
dlmwrite(fName, str, 'delimiter', '')
dlmwrite(fName, header1, '-append', 'delimiter', '')
dlmwrite(fName, mat1, '-append','delimiter', ',')

Это производит следующее:

This is the matrix: 
A, B
23,46
56,67
...