В IDL, как мога да получа достъп до променлива, дадена на нейното име?

Бих искал да конвертирам низ в име на променлива, така че да може да се чете като вече възстановена променлива.

И така, преглеждам файл и разглеждам всички файлове. Използвам RESTORE, за да използвам файла в IDL, възстановяването наименува този обект като нещо малко по-различно. Наименува го като обект, който ще наречем map_1 (в кода се нарича filerestore_name). Това е свързано с името на файла и мога да пресъздам това име на променлива - но то се запазва като низ.

Сега предавам това на процедурата make_cool_video. Въпреки това, въпреки че този низ сега е точно същият като името на varialbe, той все още е низ!. Следователно, тъй като е низ, процедурата не може да работи.

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