2014-09-19 5 views
1

Моя проблема в том, что:Итерация через множество структур

У меня есть около 300 представленных файлов. Они настроены так:

DSC_0001 имеет около 250 других STRUCT файлов в нем: -> как это: DSC_0001.marker_1 И это один имеет 10 номеров в этом. Как что: DSC_0001.marker_1.flow_angle = 90

и теперь я хочу, чтобы перебрать все файлы Struct Что-то вроде этого:

for i = 1:300 
    for j = 1:250 
     flow_angle = DSC_**i**.marker_**j** 
    end 
end 

Есть ли способ сделать это? У меня такое ощущение, что это может быть очень просто, но я просто не могу найти решение ... Надеюсь, мой вопрос достаточно ясен ...

Спасибо за вашу помощь!

ответ

2

If можно не использовать Eval.

Это зависит от того, как хранятся ваши данные, но одна возможность заключается в том, что он находится в файле .mat. В этом случае он может быть загружен с помощью

DSC_structs = load('My_DSC_struct_file.mat'); 

, а затем вы можете получить доступ к значениям, как так:

for i = 1:300 
    for j = 1:250 
     flow_angle(i,j) = DSC_structs.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]); 
    end 
end 

Why avoid the eval function

Edit: Вы говорите, что каждая структура находится в другом файле. Это немного грязнее. Я бы, вероятно, сделать что-то вроде этого, чтобы загрузить их:

DSC_structs = cell(1,300); 
for i = 1:300 
    %Note: I'm guess at your file names here 
    DSC_structs{i} = load(['DSC_' sprintf('%04d',i) '.mat']; 
end 

, а затем получить доступ к значениям, как

DSC_structs{i}.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]); 
+0

Он сохраняется во многих файлах Mat ... для каждой структуры нового ... – Bant

+0

Я добавил редактирование для нескольких файлов – ioums

+0

Спасибо, что отлично работает! – Bant

0

Я думаю, это случай использования для страшного eval функции:

for i = 1:300 
    for j = 1:250 
     eval (['flow_angle = DSC_', sprintf('%04d',i), '.marker_', num2str(j)]); 
    end 
end 

НО NB есть 2 проблемы с моим кодом выше

  1. Вы не сказали нам, где ты хотите сохранить свой угол, поэтому мой код не: /, но вы хотите что-то подобное, если хотите просто сохранить их в матрице: eval (['flow_angle(', num2str(i), ',', num2str(j), ') = DSC_', sprintf('%04d',i), '.marker_', num2str(j)])
  2. eval - это ужасный способ делать что-то, но вы вынуждены, потому что кто-то спас ваши данные в ужасном состоянии. Отсортируйте себя сейчас в будущем, повторно используя свои данные более разумно! что-то вроде:

.

for i = 1:300 
    eval (['DSC(', num2str(i), ') = DSC_', sprintf('%04d',i)]); 
end 
%// then save DCS! 

А теперь Ваш может перебрать эту матрицу структур, а не имея 300 структур загрязняя ваше рабочее пространство и заставить вас использовать eval

+0

большое спасибо !! eval работает!Я хотел хранить их в матрице flow_angle (i, j) ... Почему это ужасно? Это очень медленно? – Bant

+0

@ Это большая миссия для работы, а также для отладки. Очень трудно читать и писать код и т. Д. Я действительно предлагаю вам сохранить ваши данные в лучшем формате, чтобы вы могли избежать eval в будущем. – Dan

+0

@Bant Также, пожалуйста, прочтите ioums ответ, это лучшая альтернатива – Dan

Смежные вопросы