5.控制流程與敘述

 

5-1 informix-4gl 的程式架構

<語法格式>

DATABASE database-name

GLOBAL

   ...

END GLOBALS

MAIN

   ...

END MAIN

FUNCTION function-name()

   ...

END FUNCTION

REPORT report-name()

   ...

END REPORT

 

5-2 註解敘述

1.行註解  { #  text }

2.行註解  { -- text }

3.段註解  {  text   }

 

5-3 IF 敘述

<語法格式>

IF  boolean-exp  THEN

    statement

    ...

ELSE

    statement

    ...

END IF

§例:

IF     p_count 1 THEN

         ERROR "小於1"

ELSE

         LET p_count = p_count + 1

END IF


5-4 FOR 敘述

<語法格式>

FOR varibale = integer_exp TO  integer_exp

          STATEMENT

          ...

         [CONTINUE FOR]

         ...

         [EXIT FOR]

          ...

END FOR 

§例:

let order_total = 0

for i = 1 to ARR_COUNT()

     let order_tatal = order_total + p_item[i].total_price

end for

 

5-4 WHILE 敘述

<語法格式>

WHILE boolean-exp

         STATEMENT

         ...

         [CONTINUE WHILE]

         STATEMENT

         ...

         [EXIT WHILE]

END WHILE

§例:

while true

      call check() returning answer

      if    answer matches [yY] then

            continue while

      else if    x is null then

                   exit while

             end if

      end if

      ...

end while


FOR i = 1 TO 100

   LET sw = 0

   FOR j = 1 TO 100

       IF  A = 1 THEN

           CONTINUE FOR

       ELSE IF  A = 2 THEN

                EXIT FOR

            ELSE IF  A = 3 THEN

                     LET sw = 1

                     EXIT FOR

                 ELSE IF  A = 4 THEN

                          LET sw = 2

                          EXIT FOR

                      END IF

                 END IF

            END IF

       END IF

   END FOR

   IF  sw = 1 THEN

       CONTINUE FOR

   ELSE IF  sw = 2 THEN

            EXIT FOR

        END IF

   END IF

   ....

   ....

   ....

   ....

   ....

END FOR

   ....

   ....

   ....

   ....

 


5-5 CASE 敘述

<語法格式>

CASE  [(exp)]

          WHEN  {exp|boolean}

                   statement

                   ...

                   [exit case]

          WHEN  {exp|boolean}

                   statement

                   ...

                   [exit case]

                   ...

           OTHERWISE

                   statement

                   ...

                   [exit case]

END CASE

§例:

case  choise

       when  1 : call  choice-1()

       when  2 : call  choice-2()

       when  3 : call  choice-3()

       when  4 : call  choice-4()

       ...

end case

 

§例:

case

       when choice = 1  call choice_1()

       when choice = 2  call choice_2()

       when choice = 3  call choice_3()

       when choice = 4  call choice_4()

       ...

end case

 

5-6 CONTINUE 敘述

提早返迴迴圈開始處。

<語法格式>

CONTINUE {CASE|DISPLAY|FOR|FOREACH|INPUT|MENU|WHILE}

 

5-7 EXIT 敘述

提早跳出迴圈、程式、INPUTDISPLAY之外。

<語法格式>

EXIT{CASE|DISPLAY|FOR|FOREACH|INPUT|MENU|WHILE}


5-8 GOTO 敘述

無條件跳至標記處(同一函數、報表、MAIN之中)執行命令。

<語法格式>

GOTO標記名稱

§例:

if    status != 0 then

      goto stop_run

end if

statement

...

label stop_run: statement

                       ...

 

5-8 LABEL 敘述

標記GOTO跳到的位址。

<語法格式>

LABEL 標記名稱

 

5-9 SLEEP 敘述

使程式暫停幾秒。

<語法格式>

SLEEP 整數運算式

§例:

sleep 2

 

5-10 WHENEVER 敘述

當錯誤或警告發生時執行 ...

<語法格式>

WHENEVER {ERROR|WARNING}

                       {GOTO 標計|CALL 函數|CONTINUE|STOP}

§例:

whenever error continue

      ...

whenever error stop

      ...


5-11 FOREACH 敘述

相當於 WHILE 迴圈半和 FETCH 的組合。

<語法格式>

FOREACH 指標名稱 [INTO 變數串列]

          statement

          ...

          [CONTINUE  FOREACH]

          ...

          [EXIT  FOREACH]

END  FOREACH

§例:

foreach  psn_cursor INTO p_psn.*

           ...

        if  p_psn.type = "n" then

            continue foreach

        end if

        ...

        if  int_flag = true

            exit foreach

        end if

           ...

end foreach

 

5-12 CALL 敘述

<語法格式>

CALL 函數([參數串列]) [RETURNING  變數串列]

§例:

call  sample_function(parm1,parm2) returning  variable

call  sample_function(parm)

call  sample_function()

 

5-13 RETURN 敘述

立刻返迴呼叫之程式,並可傳回值。

<語法格式>

RETURN [運算式串列]

§例:

return xyz

return  x+y

return  7

return  true

return


5-14 DEFER 敘述

阻止使用者中斷程式執行

<語法格式>

DEFER  INTERRUPT

一旦宣告,無法改變。

 

5-15 RUN 敘述

執行作業系統下的可執行檔

<語法格式>

RUN  可執行檔名稱

§例:

run  sample.4ge

 

5-16 PROMPT 敘述

PROMPT 敘述可以從使用者處,交談式的接受所輸入之資料

<語法格式>

PROMPT  display_list  FOR variable

§例:

define  stuff_num    char(7)

prompt  "請輸入員工編號"  for  stuff_num

 

5-17 DISPLAY 敘述

<語法格式>

DISPLAY  display_list  [USING|CLIPPED]  AT  ROW,COLUMN

§例:

display  p_ssaltab.idno  at 24,1

display  p_emp_name  CLIPPED at 24,20

display  "" at 2,1

 

5-17 CLIPPED 敘述

若變數是 CHAR 的資料型態時,當設定一個值給變數時,如果所設定的資料長

度比要設定的值還要大時,informix-4gl 會自動把空白值填入變數尾部多餘的長

度內,直到和它所定義的長度為止。所以,使用者若要將變數尾部多餘的空白

清除掉,則必須使用 CLIPPED 敘述。

<語法格式>

DISPLAY  display_list  CLIPPED

§例:

define  emp_name    char(10)

define  title_name     char(4)

let  emp_name = "張三豐"

let  title_name = "先生"

display emp_name clippedtitle_name clipped


5-18 MESSAGE 敘述

用來顯示訊息至螢幕的訊息行(default 第二行)

<語法格式>

MESSAGE  display_list

§例:

let  address="台南市"

message  "請選擇戶籍所在地為"address

sleep  2

message  ""

 

5-19 ERROR 敘述

用來顯示錯誤訊息至螢幕的錯誤行(default 24 )

<語法格式>

ERROR  display_list

§例:

error  "身份證號重覆"

 

5-20 CLEAR 敘述

<語法格式一>

CLEAR  SCREEN

此敘述用來清除整個螢幕,包刮訊息行、錯誤行。

 

<語法格式二>

CLEAR  FORM

此敘述用來清除所有的螢幕欄位資料值。

 

<語法格式三>

CLEAR  VARIABLE_LIST

此敘述用來清除 field_list 所包含的一個或一個以上的螢幕欄位資料值。

§例:

clear  emp_nameidnostuff_num  ...

 

5-21 INITIALIZE 敘述

通常變數可以用lLET 設定,但若要設定為 NULL 時,必須使用 INITIALIZE

§例:

INITIALIZE  variable  TO  NULL

INITIALIZE  record_name.*  TO  NULL