我有一个格式如下的文本文件:
ab cd ef gh ij
ab cd ef gh ij
ab cd ef gh ij
如何将此数据导入 Matlab 以便将其存储为等效于此 3x5 单元格数组
的单元格数组
:
C = {
['ab'], ['cd'], ['ef'], ['gh'], ['ij'];
['ab'], ['cd'], ['ef'], ['gh'], ['ij'];
['ab'], ['cd'], ['ef'], ['gh'], ['ij'];
};
如果需要,我可以修改文本文件以包含某种“行尾”指示符。我尝试使用 textscan
,但无法弄清楚如何让它按照描述格式化变量。
编辑:更改了已接受的答案;我喜欢在 Divakar 的回答中处理可能缺失的数据点。
最佳答案
看看这是否适合你 -
c1 = cellfun(@(x) strsplit(x),importdata(textfile_path),'un',0);
C = vertcat(c1{:})
这基本上是将文本数据读入一个元胞数组,该元胞数组通过 strsplit
运行以将数据拆分为元胞,剩下的只是重新排列数据以获得所需的输出。
您可以在那里使用 regexp
而不是 strsplit -
c1 = regexp(importdata(textfile_path),'\s','split'); %// As suggested by Luis!
奖励内容
假设您有一个“不规则”形状的文本文件,也就是说,尾随位置的列中缺少一些数据,就像这样 -
ab cd ef gh ij
ab ry mf pp
ab ui rt ko bw
在那种情况下,您可以使用早期代码的修改版本 -
c1 = cellfun(@(x) strsplit(x),importdata(textfile_path),'un',0);
lens = cellfun('length',c1);
C = cell(max(lens),numel(c1));
C(bsxfun(@le,[1:max(lens)]',lens')) = [c1{:}];
C = C'
输出始终致力于该二维结构,为空白处保留空白单元格 -
C =
'ab' 'cd' 'ef' 'gh' 'ij'
'ab' 'ry' 'mf' 'pp' []
'ab' 'ui' 'rt' 'ko' 'bw'
关于matlab - 从文本文件生成多行多列的元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26682254/