вывести массив ячеек в формате .txt в Matlab - PullRequest
4 голосов
/ 19 декабря 2011

У меня есть массив ячеек, который должен быть напечатан в текстовом файле в соответствии с определенным форматом. Я пробовал некоторые из интерактивной справки (включая matlab central dlmcell, но даже это не дает мне желаемого ответа. Разделитель - \ t.

cellarray = { ...
        'AAPL' '2/20/2011' 100.5 
        'MSFT' '2/15/2011' 43.4551
            } ;

Выходные данные должны быть в формате .txt в следующем формате: (с помощью разделителя табуляции)

"AAPL"    "2/20/2011"    100.5
"MSFT"    "2/15/2011"    43.4551

В ячейке будет минимум 8000 строк и максимум 15000. Ни в одной строке не будет пустых столбцов. Возможно ли векторизованное решение? Буду признателен за вашу помощь.

Ответы [ 2 ]

7 голосов
/ 19 декабря 2011

Следующее будет работать для вашего примера:

C = cellarray.';
fid = fopen('file.dlm', 'wt');
fprintf(fid, '"%s"\t"%s"\t%g\n', C{:});
fclose(fid);

MATLAB повторно использует строку форматирования до тех пор, пока не закончится ввод. В принципе, вы могли бы сначала создать строку форматирования:

fstr = '';
for ic = 1:size(cellarray,2)
   switch class(cellarray{1,ic})
       case 'char'
           fstr = [fstr '"%s"'];
       otherwise
           % Assume numeric
           fstr = [fstr '%g'];
   end
   if ic < size(cellarray,2), fstr = [fstr '\t']; else fstr = [fstr '\n']; end
end

Тогда

C = cellarray.';
fid = fopen('file.dlm', 'wt');
fprintf(fid, fstr, C{:});
fclose(fid);
3 голосов
/ 19 декабря 2011

Я часто использую комбинацию DLMWRITE и XLSWRITE. DLMWRITE используется для создания текстового файла, поэтому XLSWRITE не будет генерировать файл в формате Excel, но оставит его в виде текста.

filename = 'file.txt';
dlmwrite(filename, 1)
xlswrite(filename, cellarray)

Обратите внимание, что в ОС, где COM недоступен (например, в Linux), XLSWRITE выполняет запись в текст, поэтому вам не нужен вызов DLMWRITE.


UPDATE

Этот метод больше не работает с последними версиями MATLAB (начиная с, вероятно, R2012b). xlswrite всегда записывает в файл в формате Excel.

Однако, поскольку в R2013b MATLAB введены функции TABLES и WRITETABLE , они отлично работают, если массив ячеек можно преобразовать в таблицу (проверьте функцию CELL2TABLE ).

...