Запись отформатированных строк на диск в MATLAB - PullRequest
0 голосов
/ 16 сентября 2011

Скажем, я хочу вывести на диск выходные данные команды magic(20), используя возможности автоматического форматирования в MATLAB (т. Е. display и disp)

Я хотел бы сделать это программноот MATLAB.Итак, мой вывод:

Сначала я настраиваю свои параметры форматирования.

format bank
format compact

Затем я открываю файл в текстовом режиме и разрешение на запись:

fID = fopen('output_file.txt', 'wt');

А затем я пытаюсь сохранить выходные данные определенных операторов на диск:

1) С num2str

string = num2str(magic(20));
fwritef(fID, '%s', string);

2) С eval (на основе наиболее проголосовавшихответ на этой теме )

string = eval('magic(20)');
fwritef(fID, '%s', string);

Есть ли способ использовать display или disp в сочетании с fprintf (или аналогичным API для записи текстовых файлов)записать на диск строки в формате disp / display?

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Звучит так, как вы хотите evalc.Он захватит вывод командного окна eval в строку.

x = magic(20);
str = evalc('disp(x)');
fprintf(fid, 'My matrix is:\n%s', str);
1 голос
/ 16 сентября 2011

Если вы работаете в Linux или OS X, вы можете запустить свой скрипт из командной строки и перенаправить стандартный вывод в файл.Возможно, вы захотите проверить синтаксис, но это что-то вроде

matlab -r my_function > out.txt

Я думаю, что есть способ сделать это и из командной строки DOSish, хотя я не знаю там синтаксиса перенаправления.

Обновление: версия без перенаправления

Работает ли что-то подобное?

format bank
format compact

s1 = evalc('magic(4)');
s2 = evalc('disp(magic(4))');

f = fopen('test.txt', 'w');
fprintf(f, '%s', s1);
fprintf(f, '\n======================================\n\n');
fprintf(f, '%s', s2);
fclose(f)

Если я запускаю это и затем выполняю !cat test.txt, я получаю

ans =
     16.00          2.00          3.00         13.00
      5.00         11.00         10.00          8.00
      9.00          7.00          6.00         12.00
      4.00         14.00         15.00          1.00

======================================

     16.00          2.00          3.00         13.00
      5.00         11.00         10.00          8.00
      9.00          7.00          6.00         12.00
      4.00         14.00         15.00          1.00
...