MATLAB - 读取多个用于循环的dat文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB - 读取多个用于循环的dat文件相关的知识,希望对你有一定的参考价值。

大家好我正在尝试制作一个循环文件​​来读取几个文件,这是我到目前为止所做的:

anoini = 1980;
anofin = 1981;

mesini = 1;
mesfin = 1;

diai=1;
diaf=1;

nano = (anofin-anoini)+1;


if (mesini == 1) || (mesini == 3) || (mesini == 5) || (mesini == 7) || (mesini == 8) || (mesini == 10) || (mesini == 12)
    lmes = 31;
elseif (mesini == 4) || (mesini == 6) || (mesini == 9) || (mesini == 11)
    lmes = 30;
elseif (mesini == 2)
    lmes = 28;
end


for idia=1:lmes
    for iano = anoini:anofin
        for nn = 1:nano


     D_1{nn,idia} = load(sprintf('F:\\salidas_nam\\%d\\%d%0.2u%0.2u06_NAM_day01.dat',iano,iano,mesini,idia));

        end
    end
end

例如,我想要这两个文件,但它似乎只读一个

"F:\salidas_nam\1980\1980010106_NAM_day01.dat"
"F:\salidas_nam\1981\1981010106_NAM_day01.dat"

我的想法是自动化这个,所以我可以选择阅读哪些年份,使用sprintf不是必要的,如果有人知道如何以另一种方式做到这一点,我会贬低它。

答案

我认为问题出在你的内循环中。你正在迭代nn但没有在文件名的构造中使用它。所以你最终加载了两次文件:

因此您的输出看起来像这样(重复文件):

D_1{1,1} = F:\salidas_nam\1980\1980010106_NAM_day01.dat
D_1{2,1} = F:\salidas_nam\1980\1980010106_NAM_day01.dat
D_1{1,2} = F:\salidas_nam\1981\1981010106_NAM_day01.dat
D_1{2,2} = F:\salidas_nam\1981\1981010106_NAM_day01.dat
...

但是,我想你想要这个(没有重复):

D_1{1,1} = F:\salidas_nam\1980\1980010106_NAM_day01.dat
D_1{2,1} = F:\salidas_nam\1981\1981010106_NAM_day01.dat
D_1{1,2} = F:\salidas_nam\1980\1980010206_NAM_day01.dat
D_1{2,2} = F:\salidas_nam\1981\1981010206_NAM_day01.dat
...

如果是这种情况,那么您可以删除内部for循环并执行以下操作:

for idia=1:lmes
    nn = 1;
    for iano = anoini:anofin
        D_1{nn,idia} = load(sprintf('F:\\salidas_nam\\%d\\%d%0.2u%0.2u06_NAM_day01.dat',iano,iano,mesini,idia));
        nn = nn+1;
    end
end

这并没有解决Adriaan在评论中提到的可能存在的潜在问题。

以上是关于MATLAB - 读取多个用于循环的dat文件的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中如何读取.dat文件

matlab批量读取数据

Matlab 读取dat文件(包含几行多余文本,数据带有数字和字符串,且以逗号分隔)

Matlab如何读取含有多个不同分隔符的txt文件

在Matlab中打开多个文件

matlab读12bit数据