2016-08-16 8 views
1

Мне нужна функция, которая выбирает определенные переменные в моей рабочей области (с использованием подстановочных знаков), присваивает свои значения (= значение этих переменных) новая переменная, (И ЭТО ЧАСТЬ ГДЕ Я ПОЛУЧИТЬ СТУК), ими управляет, а затем сохраняет новые переменные под старым именем переменной.matlab: loop through var = who (* x *) и использовать имена переменных для вызова переменных

varnames= who('*_small_*'); 

for n=length(varnames) 
    new = str2cell(varnames(n); %THIS STEP DOES NOT WORK. 
    %manipulation of those values; 
    filename=varnames(n); 
    save(filename,new); 
end; 

Кто-нибудь знает, как назвать переменные, которые мне нужны, и извлечь их значения? Наверное, мое решение не лучшее, поэтому не стесняйтесь предлагать альтернативу тому, кто.

спасибо большое!

+1

Пожалуйста, отправьте код без ошибок синтаксиса. Кроме того, вопрос и код не соответствуют по смыслу, поэтому, пожалуйста, исправьте это тоже. –

+3

Лучшей альтернативой было бы структурирование вашего кода, чтобы вы точно знали, какие переменные вам нужно манипулировать. Где эти переменные генерируются, что вы не знаете, что они собой представляют? – beaker

+0

Извините, но я не могу не комментировать. Ваш подход заставит вас потерять весь контроль над вашим кодом. Вы не знаете, когда назначаются переменные, когда они перезаписаны или где они используются. Пожалуйста, подумайте над своим дизайном еще раз и возьмите с собой клетки. Кроме этого. В вашем коде есть многочисленные синтаксические ошибки. Пожалуйста, исправьте их. У меня также есть проблемы, помогающие, так как шаги, с которыми у вас проблемы, даже не нужны. Обновите эту часть, чтобы улучшить понимание. – patrik

ответ

0

1.Не используйте str2cell. вместо этого используйте фигурные скобки.

varname = varnames{n}; 

2. eval функция не лучшая практика, но это может быть самый простой способ решить эту проблему.

eval(sprintf('new = %s;',varname)); %assign variable with varname to new 

3.Если вы просто перезаписываете переменную в рабочей области, не используйте save. Просто используйте eval снова.

eval(sprintf('%s = new;',varname)); %assign 'new' value to varname 
+1

Вы должны попытаться [evoid 'eval' когда это возможно] (http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170). Здесь тоже. Если это не «лучшая практика», не учите ее другим, я бы сказал. Вместо этого научите их лучшей практике. – Adriaan

+2

Если у вас есть альтернатива, которая позволяет избежать использования 'eval', мне интересно ее увидеть. В рамках этого вопроса я не знаю об этом без значительного увеличения сложности. – Trogdor

+1

Это потому, что желаемое поведение очень плохое, что требует плохого решения. – excaza