matlab - 从文本文件生成多行多列的元胞数组

标签 matlab text-processing cell-array

我有一个格式如下的文本文件:

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/

相关文章:

iphone - 无法使用 TCP/IP 连接 iPhone 和笔记本电脑

matlab - 访问单元格的预定义元素

python - 将 Matlab 代码转换为 Python 不可广播输出的问题

Matlab:求一个元素到矩阵边界的距离

当分隔符为 ||| 时,AWK 无法分割行

regex - 如何删除所有不以某些字符开头的行?

linux - 将 awk 操作存储在变量中

matlab - matlab/octave 中结构内容和字段名的格式化打印

matlab 元胞数组大小远大于实际数据

matlab - 如何在 MATLAB 中绘制等高线图的等高线上放置字符串标签