Функция импорта данных Matlab с пользовательским именем выходной переменной

#matlab #import #eval

#matlab #импорт #вычисление

Вопрос:

Мне нужно импортировать данные из файла, путь к которому хранится в переменной с именем fpath , а у выходной переменной должно быть имя, которое хранится в другой переменной с именем vname . Я пытался использовать eval функцию, но безуспешно.
Я использовал eval([vname '= importdata(fpath);']);
Я получаю сообщение об ошибке — Unexpected MATLAB expression .
Заранее спасибо.

Ответ №1:

С помощью файла /tmp/file.txt которая содержит 1234567890:

 >> fpath = '/tmp/file.txt';
>> vname = 'foo';
>> eval(strcat(vname,'=importdata(''',fpath,''')'));

foo =

   1.2346e 09
  

Ответ №2:

Вам нужно только

 vname = importdata(fpath);
  

Нет необходимости в инструкции eval. Vname должен содержать матрицу с вашими данными.

Ответ №3:

На этот вопрос трудно ответить без полного сообщения об ошибке и не зная типа и значения ваших переменных fpath and vname . Оценка eval([vname '= dir(fpath);']) с некоторым общим именем переменной и путем у меня работает нормально.

При этом я бы настоятельно рекомендовал не использовать eval . Сложно получить соответствующий синтаксис, сложно отлаживать и затрудняет MATLAB оптимизацию в фоновом режиме. Первый шаг к этому — оценить (хах), почему вы используете eval в первую очередь. Если вы динамически генерируете имена переменных, я бы рекомендовал использовать способность структуры принимать динамические имена полей вместо того, чтобы прибегать к eval .

Например:

 vname = 'myvariable';
fpath = 'C:test';
counter = 3;
mydata.([vname '_' num2str(counter)]) = dir(fpath);
  

ВОЗВРАТ:

 mydata = 

    myvariable_3: [21x1 struct]