M - Что не так с этим простым циклом for

Я взаимодействую с системой паротита на основе fis-gtm, и мне нужны некоторые тестовые данные для моей локальной установки Linux (fis-gtm V6.2 на CENTOS 7).

Итак, я прочитал руководства и придумал: --

set nword(1)="one"
set nword(2)="two"
set nword(3)="three"
set nword(4)="four"
set nword(5)="five"
set nword(6)="six"
set nword(7)="seven"
set nword(8)="eight"
set nword(9)="nine"
set nword(10)="ten"
set rn=^runcount+1
FOR i=1:1:10  DO    
. FOR j=1:1:10  DO    
.. set val="run:"_nword(rn)_" transaction:"_nword(i)_" update:"_nword(j)
.. w val,!

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

Что бы я ни пробовал, я получаю: -

GTM>. FOR j=1:1:10  DO
%GTM-E-CMD, Command expected but not found
    . FOR j=1:1:10  DO
    ^-----

По сути, я потратил на это целое утро, прежде чем сдаться и загрузить привязки perl.

Возможно ли вообще совместить вложенный DO с простым FOR? Если да, то что я делал не так?

Странно - "." опция вложения типов работает, если вы определяете подпрограмму и компилируете, но не для прямого выполнения!

Решается в конце концов.


person James Anderson    schedule 05.02.2015    source источник
comment
Я ничего не знаю, но, может быть, убрать табуляцию/пробелы после команды do?   -  person Fiddles    schedule 05.02.2015


Ответы (2)


После ваших аргументов итерации FOR не должно быть двух пробелов, только один.

FOR i=1:1:10 DO
. FOR...
person TIMOOOO    schedule 05.02.2015
comment
На самом деле уже пробовал это - проблема заключалась в том, что я работал в интерактивном режиме. Интерпретатор распознает только DO, за которым иногда следует .на следующей строке. Работает нормально, когда я ZLINK затем выполняю. Иди разберись. - person James Anderson; 06.02.2015

Я ничего не знаю о свинке, но вот фрагмент, который я нашел в Интернете. Может быть, это поможет.

NESTLOOP
     ;.../loops/nested
     ;set up the 2D array with random values
     NEW A,I,J,K,FLAG,TRIGGER
     SET K=15 ;Magic - just to give us a size to work with
     SET TRIGGER=20 ;Magic - the max value, and the end value
     FOR I=1:1:K FOR J=1:1:K SET A(I,J)=$RANDOM(TRIGGER)+1
     ;Now, search through the array, halting when the value of TRIGGER is found
     SET FLAG=0
     SET (I,J)=0
     FOR I=1:1:K Q:FLAG  W ! FOR J=1:1:K WRITE A(I,J),$SELECT(J'=K:", ",1:"") SET FLAG=(A(I,J)=TRIGGER) Q:FLAG
     KILL A,I,J,K,FLAG,TRIGGER
     QUIT
person Reenactor Rob    schedule 05.02.2015
comment
Все очень хорошо, помещая все в одну строку, но мне нужно будет добавить туда несколько TSTART и TCOMMIT, а также некоторые другие вещи, которые не поместятся в одну строку. - person James Anderson; 05.02.2015