У меня есть> 10 текстовых файлов, которые я прочитал в переменной «файлы», используя dir (* .txt). Файлы состоят из матриц различных размеров порядка 100x1000. Имена файлов для каждого из них имеют одинаковый формат (L\d{1,2}N_20\d{2}.txt), поэтому с блестящей помощью эфемерного пользователя я смог реализовать довольно хорошую процедуру для динамического генерировать имена полей во вложенной структуре из частей имен файлов. Это проделано миллион миль в правильном направлении, чтобы помочь мне в достижении моей конечной цели, но остается одна загадка: в последнем блоке кода моего героя он предложил мне написать:
for ix_id = 1:length(ids)
for ix_year=1:length(ids_years{ix_id})
data.(ids{ix_id}).(['Y' ids_years{ix_id}{ix_year}]) = ...
'read in my data here for each one';
end
end
К сожалению, вчера я буквально впервые попытался использовать регулярное выражение и структуры. Этот код создает количество полей структуры, равное количеству моих файлов, которые я хотел бы загрузить, и исследование показывает, что
names=fieldnames(data)
дает
names =
{
[1,1] = L14N
[2,1] = L6N
}
и
names2=fieldnames(data.L14N)
дает
names2 =
{
[1,1] = Y2009103
[2,1] = Y2010087
}
именно это я и хотел, но я просто не понимаю, как «прочитать мои данные здесь ...». Я хотел бы поместить файл с L14N и 2009103 в его имени в той части структуры, которая определена как data.L14N.Y2009103 и так далее. Поскольку кажется, что мои данные считываются в правильном порядке, я попытался добавить внешний цикл:
for jx = 1:numel(files)
for ix_id=1:length(ids)
for ix_year=1:length(ids_years{ix_id})
data.(ids{ix_id}).(['Y' ids_years{ix_id}{ix_year}]) = dlmread(files{jx})
end
end
end
но, конечно, это привело к тому, что все поля структуры содержали только матрицу, найденную в файлах{numel(files)} (т.е. последняя итерация моего цикла).
Рискуя задать плохой вопрос, может ли кто-нибудь помочь мне понять, как я должен читать данные? Это все тщательно продуманная уловка, чтобы избежать eval, но я начинаю задаваться вопросом, сумасшедший ли я, чтобы попробовать это.