如何使用命令文本扫描读取文本文件



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

鉴于前两行似乎与其他行不同,我建议执行三个读取操作:第一行,第二行,"其他一切"。你真的想要第一行的内容(从你的问题中不清楚)吗? 第二行可能应该读作一系列字符串,使用 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'),并且在c的第一个单元格中具有所有值的数组。您可以使用以下方法进一步转换这些内容:

times = b{1}(2:end); % get rid of the 'Time' string
timeStamps = cellfun(@(x)datenum(x), times); % convert string to "date" numbers

要以正确的顺序获取值(文件中的行/列),您需要转置(因为 matlab 将数字存储在行优先):

values = reshape(c{1}, 4080, [])';

事实并非如此,我在数组单元格中得到了那个向量。我可以使用这个:

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

最新更新