我有一个相当大的文本文件(超过2050行x 4080列),其格式如下:
#1 #2 #3...........#10 #1 #2 #3......
Time 21:22:10 21:23:56 21:23:07....06:19:11 06:21:00 06:21:23 06:23:01......
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 ..... 15.54 -87.60 -10.74 ......
如何使用MATLAB中的命令textscan
读取文本文件?
答案 0 :(得分:1)
鉴于前两行似乎与其他行不同,我建议进行三次读取操作:第一行,第二行,“其他所有”。你真的想要第一行的内容(你的问题不明确)?第二行应该被读作一系列字符串,使用datevalue
函数转换为时间。其余部分可以使用简单的"%f", Inf
格式声明来阅读。
这意味着它看起来像这样(现在无法测试):
fid = fopen('myfile.dat', 'r');
b = textscan(fid, '%s', 4080, 'headerLines', 1);
c = textscan(fid, '%f');
fclose(fid);
然后,您将在b
的每个单元格中有一个时间戳(单元格b {1}中为'Time'
),并且{{1}的第一个单元格中包含所有值的数组}。您可以使用以下内容进一步转换:
c
要以正确的顺序获取值(文件中的行/列),您需要进行转置(因为matlab将数字存储在行中):
times = b{1}(2:end); % get rid of the 'Time' string
timeStamps = cellfun(@(x)datenum(x), times); % convert string to "date" numbers
答案 1 :(得分:0)
它不是真的,我在阵列单元格中得到了这些向量。我可以使用它:
PathName = uigetdir;
d = dir(fullfile(PathName,'*.txt'));
for i = 1:numel(d)
A{i}= dlmread(fullfile(PathName, d(i).name),'',2,1);
B{i}= textscan(fid, '%s', 2, 'delimiter', '\n', 'headerlines', 0);
end