Как в IDL я могу получить доступ к переменной по ее имени?

Я хотел бы преобразовать строку в имя переменной, чтобы ее можно было прочитать как уже восстановленную переменную.

Итак, я просматриваю файл и просматриваю все файлы. Я использую RESTORE, чтобы использовать файл в IDL, восстановить имена этого объекта как нечто немного другое. Он называет его как объект, который мы назовем map_1 (в коде он называется filerestore_name). Это связано с именем файла, и я могу воссоздать это имя переменной, однако оно сохраняется в виде строки.

Теперь я передаю это в процедуру make_cool_video. Однако, хотя эта строка теперь точно такая же, как имя переменной, это все еще строка!. Таким образом, поскольку это строка, процедура не может работать.

filenames=FILE_SEARCH('rxrt*')
filenames_withoutextension = STREGEX(filenames,'rxrt_[0-9]+[a-zA-Z_]+',/EXTRACT,/FOLD_CASE)

restore, '/home/tomi/Documents/actualwork/'+filenames_withoutextension(18)+'.idl_sav',

filerestore_name = STRJOIN(STRSPLIT(filenameswithout(18),'_[0-9]+',/EXTRACT,/REGEX),'')
PRINT, filerestorename

make_cool_video, EXECUTE(filerestore_name),filename=filerestorenames, outdir='/path/to.file/'

retall

Что я пробовал: используя функцию RESTORE и связанные с ней RESTORED_OBJECTS для хранения указателей в массиве, а затем обращаясь к массиву. Но я не мог заставить функцию восстановления сформировать массив.

Однако при использовании EXECUTE(filerestore_name) это не преобразует его, как я ожидал.


person Tomi    schedule 28.06.2016    source источник


Ответы (2)


Вместо этого я бы рекомендовал использовать SCOPE_VARFETCH() (он не так ограничен, как EXECUTE() и, вероятно, более эффективен). Вы можете сделать что-то вроде:

make_cool_video, (SCOPE_VARFETCH(filerestore_name)), filename=filerestorenames, outdir='/path/to.file/'
person sappjw    schedule 29.06.2016

Я это написал, потом сразу подумал об ответе.

So,

Преобразовать все в строку:

string1 = "makecooljes, "+ filerestore_name, outdir='file/to/path/'"
result=  EXECUTE(string1)
person Tomi    schedule 28.06.2016