Существуют ли ограничения для запуска другого скрипта idl внутри цикла for?

for doy=1,300 do begin & date=doy_date(doy,2009) & @Aug_dyn_spec_plot.go & endfor
                                                                          ^
IDL: Syntax error.

Вышеуказанное не работает. Ниже действительно работает. @Aug_dyn_spec_plot.go — это просто скрипт, который берет переменную дату, открывает файлы для этой даты и строит график спектральной плотности.

Если бы дата была 20090101. Он разархивировал бы этот файл, извлек бы данные и сделал график. Но я хочу, чтобы он отображал все даты, скажем, за год.

Я не понимаю, является ли синтаксическая ошибка просто ограничением цикла в IDL.

Go > for doy=1,300 do begin & date=doy_date(doy,2009) & print,date & endfor
    20090101
    20090102
    20090103
    20090104
    20090105
    20090106
    20090107
    20090108
    20090109
    20090110
    20090111
    20090112
    20090113
    20090114
    20090115
    20090116
    20090117
    20090118
    20090119
    20090120
    20090121
    20090122
    20090123
    20090124
    20090125
    20090126
    20090127
    20090128
    20090129
    20090130
    20090131
    20090201
    20090202
    20090203
    20090204
    20090205
    20090206
    20090207
    20090208
    20090209
    20090210
    20090211
    20090212
    20090213
    20090214
    20090215
    20090216
    20090217
    20090218
    20090219
    20090220
    20090221
    20090222
    20090223
    20090224
    20090225
    20090226
    20090227
    20090228
    20090301
    20090302
    20090303
    20090304
    20090305
    20090306
    20090307
    20090308
    20090309
    20090310
    20090311
    20090312
    20090313
    20090314
    20090315
    20090316
    20090317
    20090318
    20090319
    20090320
    20090321
    20090322
    20090323
    20090324
    20090325
    20090326
    20090327
    20090328
    20090329
    20090330
    20090331
    20090401
    20090402
    20090403
    20090404
    20090405
    20090406
    20090407
    20090408
    20090409
    20090410
    20090411
    20090412
    20090413
    20090414
    20090415
    20090416
    20090417
    20090418
    20090419
    20090420
    20090421
    20090422
    20090423
    20090424
    20090425
    20090426
    20090427
    20090428
    20090429
    20090430
    20090501
    20090502
    20090503
    20090504
    20090505
    20090506
    20090507
    20090508
    20090509
    20090510
    20090511
    20090512
    20090513
    20090514
    20090515
    20090516
    20090517
    20090518
    20090519
    20090520
    20090521
    20090522
    20090523
    20090524
    20090525
    20090526
    20090527
    20090528
    20090529
    20090530
    20090531
    20090601
    20090602
    20090603
    20090604
    20090605
    20090606
    20090607
    20090608
    20090609
    20090610
    20090611
    20090612
    20090613
    20090614
    20090615
    20090616
    20090617
    20090618
    20090619
    20090620
    20090621
    20090622
    20090623
    20090624
    20090625
    20090626
    20090627
    20090628
    20090629
    20090630
    20090701
    20090702
    20090703
    20090704
    20090705
    20090706
    20090707
    20090708
    20090709
    20090710
    20090711
    20090712
    20090713
    20090714
    20090715
    20090716
    20090717
    20090718
    20090719
    20090720
    20090721
    20090722
    20090723
    20090724
    20090725
    20090726
    20090727
    20090728
    20090729
    20090730
    20090731
    20090801
    20090802
    20090803
    20090804
    20090805
    20090806
    20090807
    20090808
    20090809
    20090810
    20090811
    20090812
    20090813
    20090814
    20090815
    20090816
    20090817
    20090818
    20090819
    20090820
    20090821
    20090822
    20090823
    20090824
    20090825
    20090826
    20090827
    20090828
    20090829
    20090830
    20090831
    20090901
    20090902
    20090903
    20090904
    20090905
    20090906
    20090907
    20090908
    20090909
    20090910
    20090911
    20090912
    20090913
    20090914
    20090915
    20090916
    20090917
    20090918
    20090919
    20090920
    20090921
    20090922
    20090923
    20090924
    20090925
    20090926
    20090927
    20090928
    20090929
    20090930
    20091001
    20091002
    20091003
    20091004
    20091005
    20091006
    20091007
    20091008
    20091009
    20091010
    20091011
    20091012
    20091013
    20091014
    20091015
    20091016
    20091017
    20091018
    20091019
    20091020
    20091021
    20091022
    20091023
    20091024
    20091025
    20091026
    20091027
Go > 

person Daniel C    schedule 31.01.2015    source источник


Ответы (1)


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

Например, предположим, что ваша пакетная процедура использует переменную date, тогда вам нужно уже определить date (в правильном формате) перед вызовом пакетной процедуры.

Вы можете думать об использовании символа @ как о взятии всей пакетной процедуры и печати ее содержимого в том месте, где оно размещено.

Итак, в вашем примере, если внутри @Aug_dyn_spec_plot.go есть более одной строки, каждая из них должна заканчиваться на & $, чтобы указать, что вы хотите выполнить другую операцию (&), и она продолжается на следующей строке ($). Если у вас нет возврата каретки в @Aug_dyn_spec_plot.go, вы сможете просто использовать & между каждой новой командой.

Однако если вы написали программу или функцию, ваша проблема может исчезнуть. Например, попробуйте следующее:

;;  Name: print_and_plot_example.pro
;;  Example Usage:  IDL> print_and_plot_example

PRO print_and_plot_example

FOR doy=1L, 300L DO BEGIN
  date = doy_date(doy,2009)
  @Aug_dyn_spec_plot.go
ENDFOR

;;  Return to user

RETURN
END

Это должно решить вашу проблему с синтаксисом.

person honeste_vivere    schedule 01.02.2015