M - Что не так с этим простым для цикла
Я взаимодействую с системой паротита на основе 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? Если так, что я делал не так?
Причудливый - "." Опция вложения типа работает, если вы определяете подпрограмму и компилируете, но не для непосредственного выполнения!
Решено в конце концов.
2 ответа
После аргументов итерации FOR не должно быть двух пробелов, только один.
FOR i=1:1:10 DO
. FOR...
Я ничего не знаю о свинки, но вот фрагмент, который я нашел в Интернете. Может быть, это поможет.
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