如果我有一个用逗号分隔的字符串字符的 Matlab CELL 行,例如:
12/28/2012,00:00:01,0.99458,1,10518,0.99458,0.99483,0,0,0,0,-,-,-,b,-,C
如何在矩阵中将每一个分隔成自己的列?这样做最有效的方法是什么?这可以做到吗?谢谢
更新:刚刚意识到这个问题与matlab中的how-to-convert-comma-separated-string-to-cell-array-of-strings-in-matlab重复,并且我的答案与@Jonas提供的答案重复。我将其标记为重复。
这是我知道的最有效的方法:
%# Build your string
Input = '12/28/2012,00:00:01,0.99458,1,10518,0.99458,0.99483,0,0,0,0,-,-,-,b,-,C';
%# Convert to cell array of strings
Output = regexp(Input, '([^,]*)', 'tokens');
Output = cat(2, Output{:});
需要注意的几点:
1)注意,无论Input
是字符数组(即字符串)还是包含字符数组的单元格,这都将起作用。
2)我假设您希望输出是字符串的单元格数组。顺便说一句,我想不出另一种方法来使用 Matlab 将不同长度的字符串分组到单独的列中,而无需构建自己的自定义类。
3)@IlyaKobelevskiy 提供的解决方案会将字符串分组到单独的行(而不是列)中,因此基本上将您限制在单个观察范围内。
假设 str 是您的细胞系:
str ={'12/28/2012,00:00:01,0.99458,1,10518,0.99458,0.99483,0,0,0,0,-,-,-,b,-,C'};
ind=strfind(str{1},',');
len=diff([0 ind]);
sz=max(len);
A=zeros(length(ind),sz);
prev=1;
for i=1:length(ind)
A(i,1:len(i)-1)=str{1}(prev:(ind(i)-1));
prev=ind(i)+1;
end;
A=char(A);
不确定这是否是最有效的方法,但应该可以...