Доступ к переменной по имени строки

Мне нужно загрузить экспериментальные данные в scicoslab, (довольно плохо спроектированный) клон- форк scilab, который поддерживает графическое моделирование. Документация в Интернете довольно скудная, но она довольно похожа на scilab и октаву.

Данные, которые мне нужно обработать, содержатся в определенном количестве текстовых файлов: Data_005, Data_010 ,…, Data_100. Каждый из них может быть загружен с помощью флага -ascii для команды loadmatfile.

Проблема заключается в том, что loadmatfile("foo", "-ascii") загружает файл foo.mat в переменную с именем foo. Чтобы циклически обрабатывать файлы данных, мне нужно сделать что-то вроде:

for i = [5:5:100]
    name = sprintf("Data_%02d", i);
    loadmatfile(name, "-ascii");
    x = read_var_from_name(name);
    do_something(x);
end

где я ищу встроенное read_var_from_name которое позволило бы мне получить доступ к внутренней таблице символов по строке.

Вы знаете, существует ли подобная функция?

Заметки:

  1. Там нет никакого способа переопределить это поведение, если ваш файл в формате ASCII;
  2. На этом этапе я мог бы также использовать октаву (графическое моделирование не используется), хотя она ведет себя так же.

Ответ 1

>> foo = 3.14; name = 'foo'; eval(name)

foo =

    3.1400

Вышеупомянутые работы в MATLAB, и в документации Scilab говорится, что у нее также есть функция eval. Не уверен, правильно ли я вас понял.

Ответ 2

@arne.b имеет хороший ответ.

В вашем случае вы также можете сделать это в matlab:

a=load('filename.mat')
x=a.('variable_name')

Ответ 3

давайте пройдемся по вашим пунктам один за другим:

  1. "ScicosLab, (довольно плохо спроектированный) клон Scilab" Это, на мой взгляд, неточный способ внедрения программного обеспечения. ScicosLab - это не клон Scilab, а его форк. Команда ScicosLab (INRIA) создала scocos (сейчас она называется xcos в линии разработки Scilab). В какой-то момент (от Scilab v4) команда Scilab решила перейти от Tcl/tk к Java, но команда SciccosLab/scicos ушла, продолжая использовать язык (Tcl) и пакет графического дизайна пользовательского интерфейса (tk). Дать сообществу ScocosLab кредит, что вся документация и поддержка Scilab в целом не очень хороши. :) (подробнее о Scilab и вилках здесь)
  2. Что касается технического вопроса, я не уверен, чего вы здесь добиваетесь, Scilab/ScicosLab все еще имеет функцию eval которая в основном делает то, что вы хотите. Однако эта функция не рекомендуется в пользу evstr. Есть также функция execstr которую стоит изучить.
  3. loadmatfile, насколько я понял, "пытается" загрузить переменные, определенные в файле MATLAB .mat (собственный табличный формат MATLAB), в рабочее пространство Scilab. Например, если есть переменная foo она "попытается" создать переменную foo и загрузить ее значение из сценария MATLAB. Проверьте этот пример. Я бы создал переменную x(i) = foo в цикле for. опять твой вопрос не совсем понятен.
  4. Как примечание, возможно, вы могли бы рассмотреть экспорт ваших данных в формате CSV вместо файлов .mat.