如何有效地将包含数字和字符串混合的文件中的数据导入Matlab单元格数组?

时间:2014-07-31 17:37:28

标签: matlab parsing import

我有大约30个不同维度的文本文件,其中平均值 2050x1450 。如图所示,前两行的类型为 char ,分别表示配置文件的数量和记录时间。其余行是 double 类型的值。

       #1        #2       #3...........#10      #1       #2       #3......
Time 21:22:10 21:23:56 21:24:07.... 06:19:11 06:21:00 06:21:23 06:23:11......
15    0.00     0.00      0.00   ....  0.00      0.00     0.00    0.00......
30   -6.09    1200.44   32.08   .... -0.17     9.87    -44.65   768.12......
.      .         .        .     .....           .         .         .........
.      .         .        .     .....           .         .         .........
.      .         .        .     .....           .         .         .........
2050  76.009   32.98   -5.91    ..... 79.15    15.54    -87.60  -10.74 ......

有了这种结构,我发现很难将这些文件的内容分配到matlab下的单元格数组中,因为命令' dlmread '仅适用于数字数据。我的问题如下: 如何有效地将这些文件的内容有效地分配到单元格数组中?

我用 importdata 命令matlab测试了它:

PathName = uigetdir;
d = dir(fullfile(PathName,'*.txt'));
    for i = 1:numel(d)
    A(i) = importdata(fullfile(PathName, d(i).name),'\t');
end

当我执行它时,我有三个流程(数据,文本数据,colheaders)。我的第一行全部存储在一个 A(1,1).textdata {1,1} 的框中。 A(1,1).textdata {1,2} ,..., A(1,1).textdata {1,1450} 完全为空,相反我得到的是第二排。

1 个答案:

答案 0 :(得分:1)

尝试

A(i) = importdata(filename,' ',2)

将为您提供矩阵中的所有双精度数以及单元格数组中的时间。

第一行最终为一个字符串。您可以将其拆分为矩阵,如下所示:

headerStr = strsplit(A(i).textdata{1})

strsplit是Matlab 2013中的一个新函数。在旧版本的Matlab中,这应该可行:

headerStr = textscan(A(i).textdata{1},'%s')

然后,您可以使用num2cell

将这些矩阵转换为单元格数组
headerCells = num2cell(headerStr{1})

将返回一个每个单元格有一个字符串的单元格数组

现在你的第一行是#1'#1'等headerCells中的您,A(i).textdata{2}中的第二行,以及A(i).data中的所有数字

你可以将它组合成一个大的单元阵列:

alldata = [[cell(1) headerCells']; A(i).textdata(2,:); num2cell(A(i).data)]