如何使用命令textscan读取文本文件

时间:2013-12-30 21:44:40

标签: matlab textscan

我有一个相当大的文本文件(超过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读取文本文件?

2 个答案:

答案 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