Доступ к переменной по имени строки - PullRequest
11 голосов
/ 02 апреля 2012

Мне нужно загрузить экспериментальные данные в 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. На этом этапе я мог бы также использовать октаву (графическое моделирование не используется), хотя она ведет себя так же.

Ответы [ 3 ]

11 голосов
/ 02 апреля 2012
>> foo = 3.14; name = 'foo'; eval(name)

foo =

    3.1400

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

9 голосов
/ 02 апреля 2012

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

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

a=load('filename.mat')
x=a.('variable_name')
0 голосов
/ 11 марта 2019

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

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