




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
土地资源网-专业的土地流转平台 第10章 AML宏命令设计语言Arc Macro Language(AML) 是ARC环境下的一种编程语言。AML提供了完整的编程能力和具有以下功能的一组工具集:方便处理经常执行的动作;创建自己的界面;为新用户或无经验的用户提供启动(startup)实用程序;开发一个菜单驱动的用户界面来满足最终用户的要求。有两类AML文件即宏命令文件和菜单文件。宏命令文件将ARC/INFO命令组织起来,从而使许多复杂的地理操作更容易执行。菜单文件提供了一种易于使用的图形界面,用户只要学会简单的鼠标操作,就可以方便地选取和执行需要的操作。本章重点介绍前半部分的内容即AML宏命令语言的基本文法和程序设计技巧,AML菜单的使用和设计,我们在下一章详细介绍。 10.1 AML语言基础10.1.1 AML程序命名AML程序是按主机操作系统命名方法命名的正文文件,尽管并不强制,程序名通常以.AML为后缀(例如WINDOW.AML,TEST.AML)。这个.AML后缀使AML文件一目了然,也方便了文件的处理和管理。10.1.2 AML程序运行AML程序通过发出&RUN指令执行。AML程序的运行可以从命令行交互地发出指令,或者作为另一个AML文件的一行语句执行或者作为AML菜单选择的结果而运行。当调用AML程序时,.AML后缀可以省略。例如下面两个语句行是等同的,均调用AML程序COMPARE.AML。Arc:&RUN COMPARE.AMLArc:&RUN COMPARE10.1.3 AML程序的生成有两种方法用来产生AML程序,第一种方法是用操作系统正文编辑器来产生一个ASCII文件;第二种方法是用称为WATCH文件的AML特征来获取从键盘上输入的ARC/INFO命令。WATCH指令可以用来产生一个WATCH文件。一个WATCH文件将所有用户输入和程序输出存入到一个指定的文件中。这个文件又可以转化为一个只包含用户输入的AML程序。下面是一个用WATCH 文件来获取键盘输入并生成AML文件的例子。Arcplot:USAGE WATCHUSAGE:WATCH &APPEND &COMMANDS &COORDINATESUSAGE:WATCH Arc: WATCH MY.WATArc:ARCPLOTCopyright(C) 19821997 Enviromental System Reasearch Institute,Inc All Rights reserved WorldwideArcplot Version 7.1.2 (Wed Aug 13 07 : 45 : 00 PDT 1997)Arcplot:DISPLAY 9999Arcplot:SHADESET COLORArcplot:MAPEXTENT TEMPLATEArcplot:ARCS TEMPLATEArcplot:ARCLINES ROADS RD-CODE ROADS.LUTArcplot:RESELECT FINALCOV POLY SUITABLE 1Finalcov polys :8 of 628 selectedArcplot:WATCH OFF这时,所有的用户输入和命令输出都捕获到了一个名为MY.WAT的WATCH文件。MY.WAT内容如下:Arc:ARCPLOT Copyright (C) 19821993 Envirometal System Research Institute, Inc All Rights reserved WorldwideARCPLOT Version 6.1.2 (October 15,1993 )Arcplot: DISPLAY 9999 Arcplot: SHADESET COLOR Arcplot: MAPEXTENT TEMPLATE Arcplot: ARCS TEMPLATE Arcplot: ARCLINES ROADS RDCODE ROADS.LUT Arcplot: RESELECT FINALCOV POLY SUITABLE 1 Finalcov polys :8 of 628 selectedArcplot:WATCH OFF注意,在MY.WAT中,所有主程序提示下(Arcplot:)用户的输入都加了一对“”和“”。这些特殊定界符使AML能够区分用户输入和命令输出。MY.AML中的命令可以用指令RUNWATCH重新执行或者用CONV-WATCH-TO-AML指令(CWTA)转化为一个AML程序。该指令产生的AML文件只包含用户输入的命令。即Arc:RUNWATCH MY.WATArc:CWTA MY.WAT MY.AMLArc:RUN MY.AML10.1.4 AML处理器AML是一个解释语言,AML程序由ARC命令、主OS命令、AML指令、函数和变量组成。每个命令行由键盘输入或者从AML文件读出,命令行在交给ARC程序处理器处理之前先由AML处理器解释。这样在ARC中执行的实际命令是经由AML处理器解释得到的结果。AML程序行的基本处理流程如图10.1所示。每当AML程序执行时,AML处理器按某种顺序求出每个命令行的各个成分的值,最后结果传递给正在运行的ARC程序。图10.2说明了AML处理器为命令行求值的顺序。10.1.5 AML特殊符号在AML程序中,有一组约定使用的特殊符号。(1)行连续符行连续符用来标识一行的继续。当命令在一行内放不下时,可用行连续符放在多行内。例如:Arc:BUILD GETCOVER * POLY Arc:Enter the name of the coverage to BUILD POLY允许放入一行的最大字符数是1024。(2)行分隔符;行分隔符用在行内分隔命令。AML 中的语句如果不用分号;分隔,必须在分开的行上给出。分号可以作为一个行分隔符号,当在一行中需要输入多于一个命令时,每个命令可以用分号分隔。例如:Arcedit:EDITFEATURE ARC; SELECT MANY; DELETE(3)行内扩展符!行内扩展引起由行内扩展符!和!括住的字符在当前行内扩展,例如Arcplot:MAPEXTENT SOIL!1 2 3 4! GEOLOGY(4)命令行重复符(!)任何在符号对(!和!)之间的输入行将解释成程序的几个输入行,命令:Arcplot:ARCS (!WOODS STREAMS SOILS OWNER!) NOIDS等价于输入:Arcplot:ARCS WOODS NOIDSArcplot:ARCS STREAMS NOIDSArcplot:ARCS SOILS NOIDSArcplot:ARCS OWNER NOIDS(5)压缩字符任何以开始的行将不会修改或执行。有些情况也用到压缩字符,比如在用TEXT命令输出包含函数括号或百分号的正文时要用到压缩字符。例如Arcplot:TEXT 20AML ERROR Unmatched variable delimeter at end of lineArcplot: TEXT 20注意不要将AML连续符(行末波浪线)与压缩字符混淆。当一个波浪线是一行中唯一的字符时,它解释为回车。(6)注释语句/ * 注释语句在程序中是很重要的,它使程序的理解和修改更加容易。AML通过/ * 引出注释语句来说明程序。注释语句以放在AML程序或菜单文件中的任何地方,它们本身构成一行,或者接在一个语句后。(7)引用串在AML中,串是一种重要的常量。一般的串不加引号,包含空格或其他特殊字符的串必须用单引号括住,以防AML进行其他解释。例如:Arc:SETVAR FRUITS: APPLES ;ORANGES;BANANAS Arc:LISTVAR FRUITSLocal:FRUITS APPLES;ORANGES;BANANASArc:TYPE FRUITSAPPLES;ORANGES;BANANAS在一个引用串中放入一个单引号,单引号在串中要双写。例如:Arcplot:SETVAR PHRASE :This string s quoted . Arcplot:MOVE 2 2Arcplot:TEXT PHRASEQUOTE 和UNQUOTE函数也可用来为串加上引号或去掉引号。例如:Arcplot:SETVAR PHRASE : This string s not quoted . Arcplot:TEXT QUOTE PHRASE但未加引号变量允许执行变量替换。注意以下两个语句的区别:Arcplot:TEXT QUOTE PHRASEArcplot:TEXT PHRASE(8)操作符AML使用的操作符与ARC/INFO其他模块使用的操作符一样,也分为算术操作符和逻辑操作符。详细说明参见第6章6.10节(9)空格的使用在AML表达式中,任何算术、逻辑、关系操作符或括号必须前后带一个或多个空格,只有加号和减号用作单操作符(例如,10 * 5 )时例外。例如:Arc:SETVAR A : 9Arc:SETVAR B : 12Arc:TYPE CALC a / b0.75Arc:TYPE CALC a / b1991012以上介绍的AML的特殊字符是AML的默认设置。你可以用SET-CHAR指令按自己习惯的方式重新设置这些特殊字符。 10.2 AML指令、函数和变量AML 是十分灵活的语言,你可以在AML程序中使用主操作系统命令、ARC/INFO命令和AML要素来执行复杂的操作。AML要素共有3类,它们是指令、变量和函数。10.2.1 指令、变量和函数AML指令常以符号开头,执行一些不直接传递给ARC程序执行的动作。指令常用来告诉AML执行一个具体的操作,例如可以用来执行一个AML程序,或者在屏幕上打出一条消息,或者用来设置硬件环境等等。下面给出了一些指令的例子。STATION 9999WATCH MY.WATRUN MY.AML&TYPE HELLO THERE&RETURN变量是AML中存贮动态信息的方式。AML变量可以指定一个广泛的数据类型,包括字符串、布尔表达式、整数、实数,任意求值结果,以及任意种类型的表达式。SETVAR指令用来设置一个变量。例如:SETVAR INCOVER : LANDUSE上面的语句赋给变量INCOVER一个值LANDUSE,赋值号是一个可选项。因此下列代码行是等价的。SETVAR INCOVER : LANDUWESETVAR INCOVER LANDUSESETVAR INCOVER LANDUSE变量引用使用百分号来说明。例如:BUILD INCOVER POLYAML处理器遇到时,将它们识别为变量引用,变量的值将取代变量引用,求值后的命令行传递到ARC或一个ARC子系统进行处理。例如:Arc:BUILD INCOVER POLY其中,串LANDUSE将取代名为INCOVER的变量,在ARC 中将执行下列命令行。Arc:BUILD LANDUSE POLY函数像变量一样执行正文替代,它比变量更为复杂。函数名字出现在方括号内。当AML遇到方括号时,它为函数求值并返回其值。与指令一样,书写时函数名可以缩短为用能唯一标识它们的最短字符串来表达。函数返回值取决于函数自身,函数可以返回一个数值、一个字符串或者一个布尔值。函数本身通常不用作命令,它返回的值可以赋给变量或用作命令行的一部分。例如:BUILD RESPONSE Enter the coverage to BUILD POLY当AML遇到RESPONSE函数时,显示提示串,等待用户输入一个响应来回答该提示。Enter the coverage to BUILD :LANDUSE函数返回由用户输入的响应将产生这样一个命令行。BUILD LANDUSE POLY此处,LANDUSE代替了函数调用。AML提供了多种函数,有接受输入的函数,弹出一个选择表并从中选择表项的函数,操作串和进行数学计算的函数。下面介绍其中一些有用的函数。10.2.2 显示选项表AML中,有几个函数可用来在屏幕上显示选项表供作选择。这些函数带一个前缀字GET,一个例子是GETCOVER函数,该函数允许用户选择当前工作站中的Coverage,对该函数的求值将弹出一个Coverage的选项菜单,用户可以从中选择其中之一,被选择的Coverage返回成为该函数之值。代码行如下。Arc:BUILD GETCOVER * ALL POLY显示如图10.3所示菜单。如果用户选择LANDUSE,函数将用值LANDUSE去代替命令行中的GETCOVER函数项,上述命令变成BUILD LANDUSE POLY其他有用的GET函数,在菜单中显示选项列表的有GETCHOICE ,GETFILE 和 GETSYMBOL 。10.2.3 确定一个对象是否存在ARC/INFO 中的许多工作要求操作Coverage、特征属性表和系统文件,在开始对这些对象执行操作之前,需要先检查它们是否存在,或者是否符合一个指定的类型。EXISTS函数可以用于进行这种测试,EXISTS用法如下。EXISTS FILE|ADDRESS |ANNOTATIONS .subclass|ARC|CLEAN|COVER|DIRECTOR|GRID|INFO|LAYER|LIBRARY|LINE|LINK|NETWORK|NODE|POINT|POLYGON|ROUTE.subclass|-SECTION.subclass|TAT.subclass|TIC|VAT|WORKSPACE用法中的关键字表明要判断其存在对象的类型。EXISTS根据指定的对象是否存在返回.TRUE.或.FALSE.值。在这个简单的例子中,一个名为STREETS的线性Coverage和一个名为FIRST.AML的文件在当前工作区中。如果我们打印出测试这些对象时返回值,则有:Arc:TYPE EXISTS streets COVER Arc:.TRUE.Arc:TYPE EXISTS streets FILE Arc:.FALSE.Arc:TYPE EXISTS first.aml COVER Arc:.FALSE.10.2.4 得到属性信息函数LISTITEM 和ITEMINFO可以用来得到关于Coverage或INFO数据文件中数据项的信息。LISTITEM可以列出指定文件的所有数据项或仅仅符合指定类型的那些数据项(例如字符数据项)。如果要设置一个变量使之等于STREETS Coverage中所有字符数据项的列表,键入:Arc:SETVAR ITEMS :LISTITEM STREETS LINE CHAR Arc:TYPE ITEMSITEMINFO 可以用来返回指定数据项的描述,例如:Arc:TYPE ITEMINFO STREETS LINE NAME DEF 35,35,c,010.2.5 显示当前设置在ARC/INFO期间,ARC及其子系统跟踪关于设置环境的大量信息。可以用SHOW 函数访问其中大部分信息,函数返回的值可以赋给变量或直接用作命令的参数。在ARCPLOT中,可用SHOW 函数带MAPEXTENT选项得到Coverage的坐标范围,函数返回Coverage的最小、最大的X、Y坐标(用地图单位)。例如:Arcplot:SETVAR SHOW MAPEXTENT 3045.857,33572.139,8283.298,46479.11010.2.6 嵌套函数当开始了解由确定函数返回的各类值时,可能注意到某些类型的函数与某些函数协调得特别好。一些函数可以用作另一些函数的参数,你可以在一个函数里嵌入应用所需要的足够多的函数,例如由SHOW MAPEXTENT 返回的值可以用EXTRACT函数选取。EXTRACT函数从一个用空格或逗号分隔的元素表中返回指定的元素。SHOW和EXTRACT嵌套举例如下:Arcplot:SETVAR XMIN :EXTRACT 1 SHOW MAPEXTENT Arcplot:SETVAR XMIN :EXTRACT 2 SHOW MAPEXTENT 这里,SHOW MAPEXTENT 函数返回的值用作 EXTRACT 的参数。变量替换过程如下:SETVAR XMIN :EXTRACT 1 SHOW MAPEXTENT 由SHOW MAPEXTENT 返回的值用作EXTRACT的参数。等价于SETVAR XMIN :EXTRACT 1 3045.857,33572.139,8283.298,46479.110 求值为SETVAR XMIN : 3045.857类似于SETVAR XMIN :EXTRACT 2 SHOW MAPEXTENT 结果等价于SETVAR XMIN : 33572.13910.3 AML变量在AML中变量主要用来存贮动态信息,可以将变量看成容纳特定类型数据的容器。变量可以包含字符串,如用来表示要建立的Coverage的名字或工作区的路径;变量可以包含数值,如用来表示Coverage的弧段总数或由CLEAN使用的FUZZY容限值;此外变量可以包含布尔值,例如用来表明一个具体的对象是否存在。在命令执行前,AML处理器先要为一个变量求值,执行变量替换,通过控制存贮在变量中的值可以控制操作类型。本节描述各种类型的AML变量以及它们在AML程序中的使用方法。 10.3.1 变量定义和赋值在AML中设置变量的一种方式是用SETVAR指令,指令用法举例如下。Arc:USAGE SETVARUSAGE:SETVAR :value是一个可长达32个字符的字符串。AML中变量名不区分大小写。赋值语句SETVAR number : 16SETVAR NUMBER : 16都设置同样的变量。但是由变量存贮的值是区分大小写的,因此两个变量string1和string2不包含同样的值。SETVAR string1 : HELLOSETVAR string2 : hello变量的值可以是长达1024个字符的字符串(包括任何引号),也可以是一个整数,一个实数,一个布尔值或者结果为任何一种类型的表达式。AML变量不需要明显地说明为特定的类型,因而一个赋值语句可以先将一个变量设置为一个字符串,而后又将它设置为一个整数值。变量包含的值的类型可以用TYPE函数确定,TYPE返回如下4种可能值之一。类型返回值字符型1布尔型2整型-1实型-2下面的例子测试变量存入的值是否是一个整数值。SETVAR number : RESPONSE Enter an integerSETVAR intvalue : TYPE NUMBER 1第一个语句用RESPONSE函数从用户处得到一个值,输入值存入变量number 中。第二个语句中,变量intvalue设置为布尔值,表示number存贮的数是否为整数。如果由用户说明的值是整数,那么intvalue值为.TRUE.,否则为.FALES.。 10.3.2 变量连接 AML的另一个特征是变量的自动连接。利用这个特征可以方便地连接字符串,例如: S m = /esri/work01 &S n = /mod102/landuse &S p = %m%n% &S w = 2 &S x = 3 &S y = %w%x% &S z = %y% + %x%既然AML以变量值来替代变量引用,一个由两个或多个变量引用拼接组成的值,其求值结果为一个字符串。下列赋值语句给出了在执行变量替代后赋予变量的结果值。&S p = /esri/work/mod102/landuse&S y = 23&S z = 2610.3.3 索引变量组织相关变量的一种技巧是为变量建立索引。索引变量通过索引名加索引号来定义。例如一组包含Coverage 名字的变量可以命名为COVER后接索引号。S COVER1 landuseS COVER2 roadsS COVER3 streamsS COVER4 soils因为索引号是不同的,可以用AML变量来表示,例如:S COVERNUMBER roads变量NUMBER的值决定了给COVER中哪个索引变量赋值。与函数不同,AML中变量不能嵌套,当引用变量时不能用一个变量作为另一个变量的索引,下列表达式是一个无效的变量引用。TYPE COVERNUMBER其中,变量NUMBER表示索引号。访问存贮在索引变量中的值,索引号为变量时要用到VALUE函数。VALUE函数将返回给定变量的内容。这样,VALUE函数的作用与用“”括住的变量引用相同,但是索引号允许用对变量求值来表示。例如,访问一个索引变量的正确方式是:TYPE VALUE COVERNUMBER如果NUMBER等于1,在变量替代后,该表达式即为:TYPE VALUE COVER1VALUE函数求值并返回COVER1的内容,结果如下。TYPE LANDUSE10.3.4 局部变量和全局变量AML支持两种变量即局部变量和全局变量。局部变量和全局变量最主要的区别是变量的作用范围不同。局部变量对于它们设置的AML程序是“局部的”,这意味着存贮的值仅在它创建的程序内可以访问和修改。局部变量通常存贮不需要由其他AML程序访问的信息。例如可用局部变量计算执行操作的次数,当AML程序终结时,程序的局部变量也被删除。全局变量比局部变量有一个更大的作用范围,它们可以由运行在当前ARC过程中所有AML程序访问和修改。全局变量通常用来从一个AML程序向另一个AML程序传递信息。AML维护全局变量的值直到它被明显删除或者ARC过程终结。局部变量和全局变量有相同的设置方法。全局变量前面有一个句号. 。例如:SV COVER ROADS建立了全局变量.COVER,再看下面的例子。FIRST.AMLSET val ROADSSET .var2 16RUN secondSET var1 .var4TYPE .var2RETURNSECOND.AMLSET var3 .var2SET .var4 62TYPE .var3RETURN本例说明了AML局部变量和全局变量的作用范围及其区别。在第一个程序中,FIRST.AML设置了两个变量var1和.var2。var1是一个局部变量,.var2是一个全局变量,.var2可在SECOND.AML中访问。当SECOND.AML运行时,它引用.var2的值,赋给变量var3。此外,SECOND.AML生成全局变量.var4,一旦结束SECOND.AML,var3不能为FIRST.AML所访问,但是.var4可由FIRST.AML访问,因为前者是局部变量,后者是全局变量。10.3.5 列出变量值要列出AML中变量值可以发出下列指令之一。(1)LISTVAR、LV或L:列出局部的、全局的和程序的变量及其值。(2)LISTGLOBAL或LG:列出全局的变量及其值。(3)LISTLOCAL 或LL:列出全局的变量及其值。(4)LISTPROGRAM或LP:列出程序的变量及其值。例如,要列出所有的变量和值发出LISTVAR指令如下。Arc:US LVUSAGE:LISTVAR variablevariableArc:LVLocal:INPUTkeyOPTION Global:COVERnoneDEVICE4208FEATURE5KEYPATH/menus/apmenusSIZEX8.991138SIZEY6.850392Program:PROGRAMARC要列出其中一些变量可以发出上述列出变量指令,同时给出参数,即要知道其值的变量名。10.3.6 删除变量一个AML应用可能包含无限数目的变量,但是在完成应用后,往往需要删除任何不再必要的变量,DELVAR可以用来删除指定的变量,例如:Arc:DELVAR VAR1 VAR2 VAR3通配符(*)可以用来删除成组的变量。例如:Arc:DELVAR A *10.3.7 参数的传递ARGS指令是一种传递参数给程序的方法,ARGS专用于程序中提供运行程序所需的参数。ARGS指令放在AML程序顶部,后接一个变量表。当程序运行时,每一个放置在程序名后的命令行参数将赋给ARGS指令的的对应变量。例如下列AML程序(名为AE.AML)使用ARGS指令得到一个Coverage名、编辑特征类名和工作站文件名(见图10.4)。相应地,AE.AML程序正文第一行为:ARGS COVER FEATURE STATION使用ARGS变量赋值等价于用SETVAR给出下列语句:S COVER landuseS FEATURE ArcS STATION mystation传递给程序的参数可以是任何字符串或表达式(求值结果为字符串),也可以是函数求值的结果。RUN AE GETCOVER * ALL ARC 9999函数返回的Coverage的名字将传递给程序,传递给程序的值也可以是一个变量,因此ARGS可以用来传递局部变量的值给其他程序。S INPUT parcelsS TYPE poly&RUN AE INPUT TYPE 9999在变量求值后,变量行变成RUN AE PARCELS POLY 9999仅仅是变量的值,不是变量名字将传给AML程序。这样,可以使用名为COVER的局部变量作为一个程序的参数。RUN AE COVER FEATURE STATION但是,其值是完全独立于AE.AML的变量COVER的,任何对AE.AML中局部变量COVER的修改不会改变AE.AML之外的局部变量COVER的值。不提供给程序的参数设置为一个空白串,例如如果STATION文件忽略,即:RUN AE LANDUSE ARC其变量赋值等价于:S COVER LANDUSES FEATURE ARCS STATIO 任何命令行中多余的参数将被忽略,但如果使用关键字:REST的话,将把命令行中余下的串赋给最后一个变量。例如,如果ARGS语句是:ARGS string1 string2 string3:rest调用语句为:RUN test first second third fourth fifth sixth等价于执行如下赋值。&S string1 first&S string2 second&S string3 third fourth fifth sixth 10.3.7 保留变量AML提供一组系统定义的变量作为保留变量,保留变量包含关于Coverage,Grid,Tics,Graphic坐标和当前AML程序的信息。这些变量以3 个描述性字符后跟$为前缀,这些变量名字为系统保留,用户不得使用。下面对这些给予简要说明。(1)DSC$,GRD$,TIN$和LAT$变量第一组变量由AML DESCRIBE指令设置。这些变量描述Coverage时用DSC$为前缀,描述格网时用GRD$为前缀,描述TICS和LATTICE时分别以TIN$和LAT$为前缀,它们包含已经描述的地貌数据集的信息。对于一个Coverage来说,它们包含诸如Coverage名字、多边形数目、是否存在多边形拓扑结构和控制点数目等信息。这些保留变量可以按照与AML中任何其他变量同样的方式访问。例如下列AML程序在对Coverage作过编辑后再作CLEAN(建立或重建拓扑关系和特征属性表)。args coverDESCRIBE coverif %dsc$qedit% &thenCLEAN %cover%&else &TYPE The coverage %cover% has not been edited.&returnARCS命令DESCRIBE和TIN命令DESCRIBETIN和DESCRIBELATTICE分别设置DSC$和LAT$保留变量。(2)PNT$变量第二组AML保留变量由图形输入指令产生和使用,它们带PNT$前缀,这些命令可同其他变量一样访问,变量及其描述如下。PNT$DEY:表示点的设备键(光标按钮);PNT$X:表示点的X坐标;PNT$Y:表示点的Y坐标;(3)AML$变量第三组保留变量用来监测程序和菜单的运行。这些变量带AML$前缀,变量及其描述如下。AML$SEV:用来描述由AML处理的最后一行或当前ARC程序的SEVERITY状态。AML$SEV的值在AML处理器每处理一行后修改,AML$SEV的可能值是:0 无错误和警告1 出现一个警告(包括用法)2 出现一个错误(包括致命的错误)。AML$MESSAGE:容纳由AML发出的最后一条消息,该变量在生成警告和错误信息时设置,即使当MESSAGE关闭时,对该变量的设置也不会受影响。AML$MENUKEY:存贮ANSI终端做菜单选择时按下的按钮。(4)程序变量程序变量是前面带冒号(:)的特殊变量,它与局部和全局变量的区别是程序变量由程序定义而不是由用户定义,在这点上它们类似于AML的保留变量。例如,当ARC/INFO运行时,名为:PROGRAM的程序变量设置为当前运行程序名。本例中,该程序变量用来表明DESCRIBE命令是否可以运行。if %:program% ARC then DESCRIBE %COVER%&else &System ARC DESCRIBE %COVER%当前程序是ARC时,DESCRIBE命令可以直接执行,否则需启动一个ARC过程执行DESCRIBE命令。:PROGRAM是只可读变量,但也有一些程序变量可以赋值比如光标变量。光标变量是一类特殊的AML程序变量,它们光标选择集的数据项相关,用来列出和修改当前记录的数据项值。光标变量的文法是:.其中,光标名是一个已说明的光标名,数据项名是光标在其上定义的FAT或INFO文件中数据项的名字。光标变量直到打开光标才有定义,一个光标变量可以用于任何AML指令和函数。关于光标和光标变量的详细讨论,参见本书第7章的内容。 10.4 AML的控制流一般程序设计语言都提供选择和循环结构控制执行的顺序,AML语言也提供了类似的控制流指令。10.4.1 选择语句 简单形式的IF语句简单形式的IF语句条件地执行执行某种操作。格式为:&if &then 或者&if &then 解释为如果逻辑表达式为真,则执行语句。例如:if getchar Enter A character A &then &MENU A.MENUAML中布尔值由TRUE或FALSE加上句点(.)构成。即记为.TURE.或者.FALSE.或.ture.或者.false.。 语句块括号DO,ENDDO,END将几个语句括在一起形成语句块。DO指令标出了语句块的开始,END指令标出了语句块的结束。例如:&if EXIST %COVER% -poly &then&do &describ %COVER% &if %dsc $ qedit% &then build %COVER% poly&end因为IF语句只允许一个语句执行。通过DO和END形成一个语句块就可以执行多个语句。 较复杂的选择语句一个ELSE语句可以加入到IF语句来处理当逻辑表达式为假的条件。带ELSE语句的IF语句格式如下:&if &then &else 下面是一个求X,Y最大值的例子。&args x y&if %x% %y% &then &S MAX %x%&else &S MAX %y% IF语句的嵌套IF语句根据逻辑表达式结果执行两个语句之一,但是如果多于两种可能要用到嵌套的IF语句。下面是一个简单的例子。S NUMBER RESPONSE Enter a number 0if type %number% 0 &then &if %number% 0 &then &TYPE The number %number% is positive. &else &TYPE The number %number% is negative. &else &TYPE that wasnt a number.嵌套的IF语句提供了一种方法测试较多的分支,然后根据结果执行动作。 下面的例子说明了另一种嵌套的IF语句。在这个例子中, SHOW editfeature 的值决定了执行什么语句: if SHOW EDITFEATURE ARC &then&menu arc.menu &else &if SHOW EDITFEATURE LABEL &then &menu label.menu &else &TYPE No menu for this edit feature. 以上嵌套的IF语句也可以用SELECT指令实现。 SELECT语句 SELECT语句更紧凑清晰地实现条件测试后的多个分支。SELECT语句为表达式一次求值,然后根据该值确定控制流。SELECT指令格式如下:SELECT &WHEN &WHEN &OTHERWISE &END 执行SELECT语句时,先求表达式的值。AML处理器依次检查每个WHEN指令的值,搜索WHEN语句值的列表。对于第一次值的完全匹配,执行那个WHEN指令后的语句。如果没有任何WHEN指令包含匹配值,则执行OTHERWISE后的指令。如果既没有WHEN指令匹配,也不含OTHERWISE指令,则跳过整个SELECT块。是变量引用,AML函数调用,字符串,算术表达式或逻辑表达式,代表求值后的可能值。下面是可以为SELECT指令所用的表达式的例子。表达式求职结果&Select%feature%变量FEATURE的值&SelectRESPONSEDistance用户指定的响应值&Selectdate-dow星期序号&SelectEXTRACT 1 SHOW display当前显示设备&Select%size%0.5.TRUE.或者.FALSE.上面嵌套的IF语句可以用SELECT语句实现如下: &select SHOW editfeature &when ARC &menu ARC.MENU &when LABEL &menu LABEL.MENU &when NODE &menu NODE.MENU &otherwise &TYPE No menu for this edit feature &endSELECT语句支持WHEN指令后接多个值,值与值之间用逗号分隔。例如: &select username &when digitiae.aml &r digitize.aml &when edit,plot,verify &do&S choice :getchoice EDIT PLOT VERIFY promot Enter choice&run %choice%.aml &end &when manage &run manage.aml &otherwise &TYPE You do not have access to run any programs. &end 10.4.2 循环语句 循环语句用来重复执行一组动作。AML提供几类循环指令,都是重复一组动作序列,但实现方法不同。每个循环都由DO指令开始,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流信息化系统升级合同
- 劳动合同范本:工程人员专用
- 独家代理合同书(15篇)
- 2025年企业股权担保合同范文
- 2025年企业无形资产交易策划合同范本
- 2025年医疗机构卫生维护合作合同
- 2025年住宅建设合同标准
- 2025年个人护理产品分销合同
- 2025年度单位职工健康体检策划合同
- 2025年合伙创业店铺接管合同
- 大模型在教育科技中的应用
- 人教版英语八年级下册全册教案教学设计及教学反思
- 02J401 钢梯【含03年修改】图集
- 烹饪概论教学大纲
- Android移动应用开发基础教程-教案
- 脑梗合并心衰护理查房
- JGT472-2015 钢纤维混凝土
- 第九届鹏程杯五年级数学竞赛初试真题
- 电梯结构与原理-第2版-全套课件
- 《现代汉语》语音教学上课用课件
- 采购流程各部门关系图
评论
0/150
提交评论