2016-07-14 8 views
0

У меня есть то, что кажется простым циклом в IDL (версия 8.2.2). Для жизни меня не вижу, почему я получаю синтаксическую ошибку. Я попытался заменить FOREACH на простой цикл FOR с теми же результатами.Ошибка синтаксиса на FOREACH ... цикл ENDFOREACH

Извлечение цикла for и выполнение инструкций само по себе отлично работает (жесткое кодирование одного значения для file, конечно).

FOREACH file, filenames DO BEGIN 
    ; A number of 
    ; statements that execute 
    ; just fine 
ENDFOREACH 

Результат:

ENDFOREACH 
^ 
% Syntax error. 

Это все работает в скрипте вызывается с @myscript

Возможно, еще более простой пример прямо из документации поможет:

Я создал сценарий test.pro, копия/вставка из документов: http://www.harrisgeospatial.com/docs/BEGIN___END.html, содержание test.pro:

arr = [1, 3, 5, 7, 9] 
FOREACH element, arr DO BEGIN 
    PRINT, element 
ENDFOREACH 

Результат:

IDL> @test 
     9 

ENDFOREACH 
^ 
% Syntax error. 
    At: /mydir/test.pro, Line 4 
IDL> 
+1

Не так много, что может пойти не так. Является ли 'filesnames' определенным и инициализированным? Является ли простой 'foreach/for', возможно, только целыми числами? – Ash

+0

Я попытался заменить его простой 'for' /' endfor', той же проблемой. Я трижды проверял имена файлов и воспроизводил их с более простым примером, как теперь выкладывается. –

+1

Вы уверены, что ваш вопрос о 'idl', а не' idl-programming-language'? – PetSerAl

ответ

1

Пакетные файлы (так называемые с помощью @myscript) не может иметь составные операторы, т.е. с BEGIN/END. Внесите его в процедуру/функцию или программу основного уровня.

+0

Ahhhhhh ::: вдали слышен липкий пощечину :: Спасибо! –

+2

Или, если вы действительно этого хотите, вы можете использовать «&», чтобы сделать его составным. Например: элемент foreach, arr do begin & blah blah & endforeach Вы можете использовать $, чтобы разделить его на несколько строк. –