MATLAB - чтение нескольких файлов данных для цикла - PullRequest
0 голосов
/ 04 октября 2018

Привет всем, я пытаюсь создать файл цикла для чтения нескольких файлов, вот что я сделал до сих пор:

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, если кто-то знает, как это сделать по-другому, я буду признателен за это.

1 Ответ

0 голосов
/ 04 октября 2018

Я думаю, что проблема в вашем внутреннем цикле.Вы перебираете 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

Это не решает потенциальные проблемы високосного года, которые могут возникнуть у вас, как упоминал Адрианв комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...