2015-10-05 4 views
0

Учитывая, что у меня есть матрица строк с переменными именами и соответствующие значения в другой матрице (оба из CSV-файла), как я могу создавать переменные в рабочей области с именами из матрицу имен и значения из матрицы значений?Назначить переменную по имени в scilab

Я нашел global, чтобы определить область переменной, чтобы я мог писать ей в функции, но я не нашел способ обрабатывать имена переменных среды выполнения.

ответ

1

Вы должны использовать execstr функцию (см: https://help.scilab.org/docs/5.5.2/en_US/execstr.html)

Например, с матричными имен, хранящихся в переменной MatrixNames и содержание матрицы, хранящейся в переменной MatrixContent, вы будете просто:

execstr(MatrixName(i)+'= MatrixContent'); 

С i номер ячейки для соответствующего имени матрицы, которое вы хотите обработать.

+0

Это хорошо сработало, спасибо! – Christoph

1

Как предложено @ david-dorchies, вы должны использовать execstr. Чтобы убедиться, что они доступны по всему миру, используйте глобальные переменные, если вы хотите сделать это в функции.

См. Ниже пример реализации.

funcprot(0); 
clear; 
function assign_to_globals(names, values) 

     for i=1:length(values) 
      execstr(sprintf('clearglobal %s; global %s;', names(i), names(i))) 
      execstr(sprintf('%s = %s;', names(i), string(values(i)))) 
     end; 

endfunction 

function disp_all_globals(names) 
    for i=1:(size(names,1)*size(names,2)) 
     disp(names(i)) 
     execstr(sprintf('global %s; disp(%s)', names(i), names(i))) 
    end; 
endfunction 

values = list(23,5.6,6/10,"[1,2,3]"); 
names = ['a','my_long_var_name','c1','my_sub_mat']; 

assign_to_globals(names, values) 
disp_all_globals(names) 

clearglobal()