Использование dlmwrite для записи объектов ячеек MATLAB - PullRequest
0 голосов
/ 21 марта 2012

У меня есть массив ячеек с 7 столбцами. Все эти столбцы содержат строки. Я хочу записать этот массив ячеек в текстовый файл. Для начала я делал это только на 1 элементе ячейки, и это мой код:

 dlmwrite('735.txt',cell{1},'delimiter','%s\t');

cell{1} выглядит так:

Columns 1 through 2

[1x30 char]    [1x20 char]

Column 3

'Acaryochloris'

Column 4

'Cyanobacteria001'

Columns 5 through 6

'Cyanobacteria00'    'Cyanobacteria'

Column 7

'Bacteria'

Это дает мне вывод без разделения столбцов. Пример вывода: Acaryochloris_marina_MBIC11017AcaryochlorismarinaAcaryochlorisCyanobacteria001Cyanobacteria00CyanobacteriaBacteria

Правильный вывод должен иметь пробелы между всеми столбцами:

Acaryochloris_marina_MBIC11017 Acaryochloris_marina Acaryochloris Cyanobacteria001 Cyanobacteria00 Cyanobacteria Bacteria

Обратите внимание, что для второго столбца нам нужно добавить подчеркивание между Acaryochloris и marina. Изначально между этими двумя словами есть пробел.

Надеюсь, я правильно объяснил проблему, был бы признателен за помощь. Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

DLMWRITE для числовых данных.В вашем случае он обрабатывает данные char как числа, каждый символ как время.Вы, вероятно, просматриваете полученный файл таким образом, что не видите разделителей табуляции.

Вы можете использовать XLSWRITE для записи массива строки ячейки в файл.Если вы не хотите, чтобы вывод был в формате Excel, запустите DLMWRITE перед тем, как записать какое-либо число в файл.

dlmwrite(filename,1)
xlswrite(filename, Acell{1})

Не называйте переменную ячейку, которая является ключевым словом в MATLAB.

В качестве альтернативы вы можете записать в файл с функцией более низкого уровня, например, FPRINTF.

UPDATE :

Если вы хотите использовать XLSWRITE вцикл for и чтобы не перезаписывать данные, вы можете указать строку для запуска:

dlmwrite(filename,1)
for k = 1:10
    xlswrite( filename, Acell{k}, 1, sprintf('A%d',k) )
end

ОБНОВЛЕНИЕ 2 :

К сожалению, это не работаетбольше в последних выпусках MATLAB (я полагаю, начиная с R2012b).XLSWRITE выдает ошибку о неправильном типе файла.

1 голос
/ 21 марта 2012

Что-то вроде следующего должно делать то, что вы хотите:

fid = fopen('735.txt', 'w');
fprintf(fid, '%s\t', cell{1}{:});
fclose(fid);
...