我有大约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} 完全为空,相反我得到的是第二排。
答案 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)]