Как сохранить строковую матрицу и записать в файл?

Я не знаю, может ли Matlab это сделать, но я хочу хранить некоторые строки в матрице 4 × 3, каждый элемент в матрице является строкой.

test_string_01  test_string_02  test_string_03
test_string_04  test_string_05  test_string_06
test_string_07  test_string_08  test_string_09
test_string_10  test_string_11  test_string_12

Затем я хочу записать эту матрицу в обычный текстовый файл, разделенный запятой или пробелом.

test_string_01,test_string_02,test_string_03
test_string_04,test_string_05,test_string_06
test_string_07,test_string_08,test_string_09
test_string_10,test_string_11,test_string_12

Похоже, тип данных matrix не может хранить строки. Я посмотрел на cell. Я пытался использовать dlmwrite() или csvwrite(), но оба они принимают только матрицы. Я также сначала пробовал cell2mat(), но таким образом все буквы в строках разделяются запятыми, например

t,e,s,t,_,s,t,r,i,n,g,_,0,1,t,e,s,t,_,s,t,r,i,n,g,_,0,2,t,e,s,t,_,s,t,r,i,n,g,_,0,3

Так есть ли способ добиться этого?


person zihaoyu    schedule 04.06.2010    source источник
comment
Работа с текстом — это боль в Matlab. В Python это заняло бы, может быть, 5 строк. Зачем вам это нужно?   -  person Hamish Grubijan    schedule 04.06.2010
comment
@Hamish Grubijan Потому что у меня есть код от другого человека, который выводит матрицу. Я хочу заменить первый столбец реальными именами.   -  person zihaoyu    schedule 04.06.2010
comment
@Hamish Grubijan: К счастью, в Matlab это занимает всего 5 строк.   -  person Jonas    schedule 04.06.2010


Ответы (3)


Массив ячеек — это способ хранения строк.

Я согласен, что сохранять строки в текстовый файл сложно, но вы можете сделать это с помощью этого кода:

strings = {
'test_string_01','test_string_02','test_string_03'
'test_string_04','test_string_05','test_string_06'
'test_string_07','test_string_08','test_string_09'
'test_string_10','test_string_11','test_string_12'};

fid = fopen('output.txt','w');
for row = 1:size(strings,1)
    fprintf(fid, repmat('%s\t',1,size(strings,2)-1), strings{row,1:end-1});
    fprintf(fid, '%s\n', strings{row,end});
end
fclose(fid);

Замените \t на ,, чтобы получить CSV-файл.

Вы также можете сохранить массив строк в файле Excel с помощью XLSWRITE (требуется COM-интерфейс, поэтому он доступен только в Windows):

xlswrite('output.xls',strings)
person yuk    schedule 04.06.2010
comment
Мое решение было слишком длинным, чтобы поместить его в комментарий. Если вы обновите свое решение, я удалю свой ответ. - person Jonas; 04.06.2010
comment
@Jonas, спасибо за лучший код. Это определенно заслуживает отдельного ответа. (Что касается меня, я бы принял ваше.) Жаль, что вчера было поздно. - person yuk; 04.06.2010


В большинстве случаев вы можете использовать разделитель ' ' и заставить Matlab сохранить строку в файл с помощью dlmwrite.

Например,

output=('my_first_String'); dlmwrite('myfile.txt',output,'delimiter','')

сохранит файл с именем myfile.txt, содержащий my_first_String.

person Januka    schedule 27.02.2012