收藏 分享(赏)

MapBaSiC语言及其应用.pdf

上传人:精品资料 文档编号:10751108 上传时间:2020-01-07 格式:PDF 页数:24 大小:627.90KB
下载 相关 举报
MapBaSiC语言及其应用.pdf_第1页
第1页 / 共24页
MapBaSiC语言及其应用.pdf_第2页
第2页 / 共24页
MapBaSiC语言及其应用.pdf_第3页
第3页 / 共24页
MapBaSiC语言及其应用.pdf_第4页
第4页 / 共24页
MapBaSiC语言及其应用.pdf_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、第3 篇MapBaSiC语言及其应用 第9章MapBasic基础 91 MapBasic 概述 在上一篇中,我们已对 MapInfo 地理信息系统的使用作了具体介绍。虽然 MapInfo 系统对各种地图信息及数据提供了强大的处理功能,并且能够很好地与其他数据库进行连接,但毕竟 MapInfo 是面向专业人员的一个人机交互式系统。要很好地使用它,必须具有一定的计算机水平和一定的地理信息系统知识, 这对于普通用户显然过于苛刻。 为了解决这个问题,MapInfo 提供了一个用户系统开发工具 MapBas ic,人们可以用 MapBasic 来设计、建立符合自己工作特点和要求的纯用户化的应用系统。作为

2、一种功能强大、易于使用的结构化程序设计语言,MapBasic 提供了 380 多种函数和命令语句。与传统的 GIS 相比,良好的软件集成环境、面向对象和事件处理式的编程思想,都是 MapBasic的显著特征。 911 MapBasic 的集成环境与特征 MapBasic 的软件集成环境主要包括文本编辑器 (Editor)、程序编译器(Co mpiler)、程序链接器(Linker)和联机帮助( Help)四个部分。文本编辑器用于程序的编辑与修改;程序编译器用于源程序编译,以生成可执行程序:程序链接器用于将若干独立的模块链接成一个应用程序:联机帮助则为程序员在线提供 MapBasic 的每条语句

3、或函数的详细说明资料。 针对各类用户的不同需求,用 MapBasic 可以迅速制定出用户所需的菜单、按钮或对话框等; 用户不仅可以修改标准的 MapInfo 菜单, 而且可以在原来的菜单栏上增加新的菜单项;利用 MapBasic 用户可以方便、准确地绘制经、纬线,避免手工绘制的烦琐以及可能引起的误差;此外,用户也可以自行设计各种新的图形符号。 MapBasic 中提供了一系列 SQL 函数和许多非常实用的语句,大大增强了对数据库进行操作的能力。例如,仅用一条非常南单的 Select 语句,就可进行数据库的查询工作,实现对数据排序、求和、过滤等操作。此外,MapBasic 还提供了一系列对 Ma

4、pInfo 的表(Table)或其他类型的表格(如 dBASE、FoxBASE、Lot us、ASCII 或 Excel 的表格文件)进行操作的命令和函数,可完成对表的各种操作(如打开、新建或修改等),进行对数据对象的各种编辑操作。利用 MapBasic 还可以将多媒体技术引入地理信息系统,可以随时调动视频、声音、动画等媒体信息,使用户的应用系统更加形象、生动。 MapBasic 提供了 MapI nfo 系统与其他应用程序的接口功能,MapBasic 的开放式体系,结构允许程序员调用外部函数中的例程。例如,MapBasic 不仅可以利用 DDE (Dynamic Data Exchange)

5、调用其他软件中的程序(例如 C 语言,V isual Basic 的应用程序),还可以调用Windows DLL(Dynamic Link Library)中的例程。用户可以通过运用 MapBasic 编写的执行程序,来完成工作中复杂的例行工序。这样就可以将日常烦琐的例行工作交给计算机处理,不仅能够大大提高工作效率,而且还使管理人员从完全不必要的精力消耗中彻底解放出来。 912 MapBasic 的安装 1软硬件要求 在安装MapBasic 之前, 必须保证计算机满足以下最低配置要求; 任何 80486 或 Pentium CPU,8MB 以上内存(若使用 Windows NT 则必须有16M

6、B 以上内存):6MB 以上剩余硬盘空间:系统软件可以为 Micrsoft Windows 3.1、Wind ows NT 3.51或Windows 95及以上版本。 2安装MapBasic 在安装 MapBasic 之前,必须首先安装好 MapInfo 系统,关于 MapInfo 的安装请参阅前面章节。下面是 Windows 95 下安装MapBasic 的步骤: 1)单击 W1ndows 95 桌面上的开始按钮,然后再单击运行菜单,此时弹出一个命令行对话框。 图 9-1 MapInfo 的安装界面 2)把你的MapBasic 1 号盘插入 A 驱动器。 3)在对话框命令行中键入 A:SET

7、UP.EXE 后单击“确定”按钮。 4)接着你可以根据屏幕上出现的提示来完成整个安装过程(见图 9-1)。 如果在你安装之前已经装有较早的 MapBasic 版本,你会在硬盘上发现两个MapBasicEXE 文件。例如,你已经安装了 MapBasic 3.0,那么最好把 MapBa3sic 4.O安装在相同的目录下(如 C:MapInfoMa pBASIC.EXE),默认的 MapBasic 目录是在 MapInfo 目录下(如 C:MAPINFO|Ma pBasicMAPBAsic.ExE)。安装结束后可以将 3.0 版本的 MAPBASICEXE删除以节省硬盘空间。 913 创建 MapB

8、asic 的应用程序 安装好了 MapBasic,就可以着手创建 MapBasic 的应用程序,具体步骤如下: 1)运行MapBasic 开发环境。 2)选择FileNew打开一个编辑窗口。 3)在编辑窗口中输入一个 MapBasic 程序。 例如,可以输入下面只有一行的一个 MapBasic 程序(见图 9-2): 图 9-2 MapBasic 编辑器 Note “Welcome to MapBasic” 4)选择File Save,将这个程序存储为 一个磁盘文件,并为该文件输入一个文件名,例如 Welcome.mb。 5)选择project Compile Current File, Ma

9、pBasic 将编译你的程序(Welcome.mb),并自动生成一个相应的可执行文件(welcome.mbx)。 6)启动MapInfo 系统。 7)选择 Maplnfo 主菜单中的文件,运 行 MapBasic 程序,MapInfo 提示你选择一个你想运行的程序。例如:若选择了 Welcome.mbx,MapInfo 将运行该程序。程序执行后会在一个对话框中显示一条信息“Welcome to MapBasic” 。 这里已经包括了创建 MapBasic 应用程序的最重要的步骤:建立、编译和运行程序。当然,在实际应用中这个过程可能会更加复杂。 1MapBasic 程序编辑 运行MapBasic

10、,然后从File菜单中选择 Open或New开始编辑个 MapBasic 程序,前者是显示一个已经存在的程序文件,可以对它进行浏览及修改,后者是打开一个新的编辑窗口,可以在此输入一个新的程序。编辑修改结束后,选择FileSave进行保存。MapBasic 自动为程序文件追加一个文件扩展名(.mb) 。由于 MapBasic 是以标准的文本格式来保存程序文件的,所以如果你愿意的话,也可以用其他的文本编辑软件来编辑 MapBasic程序。 在MapBasic 编辑窗口中可以使用一些快捷键,以提高你编辑程序的效率。表 91列出了一些主要的快捷键及其对应的功能。 表91 MapBasic编辑器的常用快

11、捷键 分类 快捷键 功能 光 Home /End 插入点移到行首/行末 标 Ctrl-Home /Ctrl-End 插入点移到文件为文件尾 移 Ctrl- 插入点向前向后移一个词 动 Ctrl-T 显示 Go To Line 对话框(插入点移到指定行) 文 Ctrl-O 打开一个文件 件 Ctrl- N 打开一个空的编辑窗口(新建一个文件) 操 Ctrl-S 保存当前文件 作 Ctrl-P 打印当前文件 Ctrl-A 全部选中 编 Ctrl-C 将选择的内容复制到剪贴板 辑 Ctrl-X 将选择的内容剪切到剪贴板 操 Ctrl-V 粘贴 作 Ctrl-Del 删除光标后的一个词 Del 删除选

12、得的内容,不复制到剪贴板 寻 Ctrl-F 寻找并替换 找 Ctrl-G 重复最近的寻找命令 替 Ctrl-R 替换选择的文本并继续寻找 换 MapBasic 的文本编辑窗口所能编辑文件的大小是有限制的。如果你使用的操作系统是Windows 95, 那么这个限制是 64KB, 换言之, 在一个文本窗口中你编辑的文件不能大于 64KB。当你的应用程序比较大时, 可能会超过 64KB, 那么可以用以下三种方法中的一种来解决 64KB的限制问题: 用其他的文本编辑器编辑程序文件,再用 MapBasic的Fil eCompile From File编译该程序。 把一个大的程序文件(.mb 文件)分成两

13、个或多个较小的文件,然后用 MapBasic 的Include 语句把多个文件组合成一个应用程序。 将一个大的程序文件(.mb 文件)分成两个或多个较小的文件,然后通过一个项目文件(Project File)把这些小文件连接成一个应用程序。在某种程度上它与方法二有些相似,但方法三使用起来更有效,因为它可以单独编译每个模块,这就意味着如果你只修改了其中的一个模块,那么你只要对该模块进行重新编译就可以了。 2MapBasic 程序编译 先把你的程序调入到编辑窗口,接着从Project 菜单中选择Compile Cur rent File菜单项。如果同时有多个编辑窗口打开,那么 MapBasic 只

14、编译最前面那个窗口里面的程序。因此,如果有多个编辑窗口打开,在编译之前应先把合适的窗口作为活动窗口。 MapBasic 编译器会检查程序的语法。如果程序中包合语法错误,MapBaic 会显示一个对话框窗口,指出发现了错误。然后在编辑窗口的下面显示错误的详细列表,每个错误信息由一个行号开始,它指出了该错误在程序中是第几行,只有更正程序中的全部错误,MapBasic才能正确编译程序。 有些类型的拼写错误,MapBa sic 编译器是检测不到的。例如,下 面程序的第二行包含一个拼写错误(states 错拼成 tates): Open Table ”states” Map From tates Map

15、Basic 编译器不能识别第二行中的拼写错误,这并不是编译器的缺陷,因为一些变量和表只有到运行程序时才被计算。 当用户运行前面的程序时, MapInfo试图去执行Map From tates 语句,此时,MapInfo 会显示一个错误信息“Tab le tates is not open” ,它说明表tates 没有被打开。 如果你使用别的文本编辑器而不是用 MapBasic 来编辑你的程序,那么最好用FileCompile From File去编译你的程序。使用这种方法不需要把程序显示在 MapBasic编辑窗口中。如果你在File菜单中选择了Compile Fr om File,MapBa

16、sic提示你选择一个文件去编译。如果程序中有编译错误,MapBasic 会把错误信息写到一个扩展名为.err 的文本文件中。例如,我们用Compile Fro m File编译程序 dispatch.mb,MapBasic 则把错误信息写到文本文件 dispatch.err 中。可以选择FileOpen显示这个错误文件。 3连接多个模抉成一个项目 项目文件(Project Fil e)是一个文本文件,它允许 MapBasic 把多个相互独立的程序文件连接成一个单一的应用程序。如果你正在开发一个大而复杂的应用程序,你的程序可能会包含上千条的代码,当然,你可以把这些代码都输入到一个文件中。但大多数

17、程序员不喜欢管理十分庞大的程序文件,因为一旦程序超过干行,就很难找到程序中你想找的特定部分。因此,许多程序员把一个大的应用程序分成两个或多个较小的文件。这就需要建立一个项目文件。项目文件告诉 MapBasic 连接器如何把那些独立的模块组合成一个可执行的 应用程序。 项目文件是 MapBasic 程序设计中的可选部分。你完全可以不使用项目文件而完成应用程序的建立、编译和运行工作。但是,如果你计划开发一个大型的应用程序,那么项目文件会给你带来一些好处: 项目文件可以模块化你的程序。一旦你建立了一个项目文件,你就可以把程序分成多个小文件。模块化程序使你对程序的维护变得更加简单,还可以使你的程序文件

18、变得较小,以便可以在 MapBasic 的编辑窗口对它们进行编辑。 项目文件使多个程序员同时为一个项目编写程序变得更加容易。每个程序员可以 各自在独立的模块中工作,最后可以用项目文件把这些独立模块连接起来。 项目文件可以减少重新编译应用程序的时间。如果多模块项目中的一个模块被修 改,你只要重新编译该模块,然后重新连接这个项目就可以了。这比每次都要重新编译所有的源代码要快得多。 创建项目文件既然有这么多优点,那么如何来建立一个自己的项目文件?在具体介绍创建项目文件之前,让我们来看两个关于项目文件的例子。 下面是一个用项目文件(tbproj.mbp)建立文本框的例子: Link Applicati

19、on = textkx.mbx Module = textbm.mbo M0dule = Auto_lib.mbo 类似地,用项目文件(sbproj.mbp) 建立的一个刻度条(Scals Bar)的例子如下: Link AppliCation = scalebar.mbx Module = scalbar.mbo Module = auto_lib.mbo; 这两个项目文件的最后一行相同,它告诉 MapBasic 把auto_lib 模块连接到该项目中。Auto_lib 模块是 MapBasic 自带的一个例程。如果你已经写了一个程序,并且想为你的程序建立一个项目文件,那么可以按照下面的步骤

20、进行: 1)选择FileNew打开一个编辑窗口。 2)在编辑窗口中输入下面这一行: Link 3)接着输入这样一行文本 Applicati on = appfilename(这里 appfilenams 是指你想建立的可执行文件的文件名)。例如: Application = C:MBCODECUSTOM.MBX 4)接着再输入一行文本 Module = modulenam e(这里mdulename 是指 MapBasic 的目标文件名),例如: Module = C:MBCODECUSTOM.MBO 请注意文件的扩展名,MapBasic 的目标文件的扩展名为.mbo。当多模块项目中的一个单独

21、的模块被编译时,MapBasic 就会为它建立一个目标文件。 任何时候,当你选择projectCompile C urrent File时,MapBasic 就会试图把当前文件编译成一个可执行文件(扩展名为.mbx)。 但是如果该程序文件调用了不在此文件中的函数或过程,MapBasic 则不能建立一个.mbx 文件。在这种情况下 MapBasic假设它只是一个大项目的一个部分,而把它编译成一个目标文件(.mbo)。另外,当一个程序没有主过程时,MapBasic 在编译时也把它编译成一个目标文件。 5)重复第 4)步,直到包括了你的应用程序的所有模块。 6)选择FileSave As保存项目文件

22、。注意在 Save As 对话框中选择文件类型中的“Project File”(从对话框左下角的文件类型列表中选择),以便使保存的项目文件有扩展名.mbp。 7)关闭编辑窗口。 至此,一个项目文件已经建好。如果以后你想把更多的模块加入到你的项目中,只需在项目文件中加入相应的“Module=”行。 项目建好后,还需要对它进行编译和链接,可以按照下面的步骤编译和链接你的项目: 1)编译在项目中用到的每一个模块。为了编译这些模块,可以先选择FileOpen,然后选择ProjectCompile Current File。或者你可以直接用 FileCompile Fr om File对选择的文件进行编

23、译。 2)选择ProjectSelect Project File告诉 MapBasic 你想链接哪个项目文件。此时显示Select Projec t File对话框,选择想要链接的项目 文件(.mbp)后单击OK按钮,MapBasic 就会链接这个项目文件。被选择的项目文件将出现在编辑窗口,直到你退出MapBasic、 关闭编辑窗口或打开另外一个项目文件。 任何时候只有一个项目文件可以被选择。 3)选择ProjectLi nk Current File链接你的应用程 序。MapBasic 依次读入在项目文件中列出的目标文件(.mbo)。如果没有链接错误,MapBasic 生成一个可执行文件(

24、.mbx),否则将显示错误信息,也可以用FileLi nk From File对项目进行链接,而不需要先把项目文件显示在编辑窗口,但要链接的各模块必须先编译成目标文件。 914 程序的调试与运行 创建 MapBasic 应用程序后,整个应用程序开发工作只能算是完成了一半,因为我们还需要对它进行调试,纠正存在于程序中的错误,使之完全按着开发者的意图运行。 1编译错误与运行错误 程序错误可以分为两种类型:编译错误和运行错误。编译错误主要由语法错误和录入错误引起,它使程序无法成功编译。运行错误是用户在实际运行应用程序时产生的错误。引起这种错误的原因很多。例如下面的语句可以成功编译: Open Tab

25、le “states” Map From stat 但是如果没有一个名叫“stat”的表,那么程序就会产生一个运行错误,MapInfo 中断MapBasic 应用程序的执行,然后显示一个描述该错误的对话框,如图 9-3 所示。 图 9-3 运行错误的显示 编译错误产生时,相应的错误信息指出了程序文件名和错误所在的行号。知道了发 生错误的行号,可以返回 MapBasic 开发环境,选择Search Go To Line定位到引起问题的行,从而迅速地改正错误。 2调试MapBasic 程序 调试程序一般是指发现并改正运行错误的过程。有些运行错误很容易纠正,例如那 些由输入错误引起的,像上面的例子中

26、,程序员原意可能是想输入表名“states”而不是“stats” 。但是另外一些错误却很难定位,为了帮助你检测和纠正程序中的错误,MapBasic 提供了调试程序的工具(Stop和 Continue 语句)。 如果你的程序不能正确执行,你可以用下面的过程来找到问题发生在哪里: 1)在MapBasic 开发环境中编辑你的程序, 把 Stop 语句放在程序中可能有错误的那个部分的前面。 2)重新编辑并运行你的程序。当程序执行到 Stop 语句,MapBasic 暂时挂起正在执行 的程序, 在 MapBasic 窗口中显示一个调试信息(例如 “Breakpoint at textbox.mb lin

27、e23” )。 3)在MapBasic 窗口中: 输入 ? Dim 查看所有正在使用的局部变量列表 输入 ? Global 查看所有正在使用的全局变量列表 输入 ? Varia ble_name 查看某个变量的当前值 输入 ? Varia ble_name = new_value 改变变量的当前值 4)当你完成检查或修改了变量的内容后, 可以在 MapBasic 窗口输入Continue 接着执行程序,你也可以选择 MapInfo 的文件继续程序来启动程序的重新执行。 在下列情况下,不能用 Stop 语句来挂起一个程序: 在传统的 Function End Function 结构中不能使用 S

28、top 语句。 在对话框控制处理程序中不能使用 Stop 语句,因为处理程序处于激活状态,对话框还在屏幕上。 在一个 ProgessBar 处理程序中不能使用 stop 语句。 当另外一个程序正在运行时不能调试这个程序。 另外,MapBasic 的“Note”和“Print”语句也可以帮助我们来调试一个程序。例如, 如果你想观察一个变量内容的变化情况,可以简单地在你的程序中加入类似以下的 Print语句: Print “Current value Of counter:” + counter 这样即可以在 MapBasic 的信息窗 口输出一条相应的信息。另外,例程 Appinfo.mbx 可

29、以让你检查当前正在运行的 MapBasic 应用程序的全局变量值。 3错误的捕获 一个设计良好的应用程序应该对可能出现的运行错误进行预测, 一旦错误发生还能采取一些补救措施。对运行错误的窃听和处理就叫做错误的捕获。 、捕获错误可以使用 OnError语句。 在程序执行的任何一个点上,错误捕获既可以被允许也可以不被允许。默认情况下,所有过程或函数是由错误捕获不允许开始的,其中用 OnError语句可以使错误捕获被允许。典型的情况是,OnError 语句总指向一个在同一个过程或函数中另一个位置的标号。标号后面的语句叫做错误捕获处理程序。一旦错误发生,就去执行该处理程序,而不是中止程序。 在错误捕获

30、处理程序中,你可以调用 Err()函数获得一个整型的代码,它表明了该错误是属于哪一种类型。同样地,你也可以使用 Error$()函数返回一个描述错误信息的字符串。在程序的结束处使用 Resume 语句, 它告诉 MapBasic 在该处理程序执行结束时接着执行哪一行程序。例如: OnError Goto no_states Open Table “states” Map From states After_mapfrom: End program No_states: Note “Could not Open states; no map used” Resume after_mapfrom

31、该程序的第一个语句是使得错误捕获被允许,并告诉 MapBasic 一旦错误发生就转去执行 no states 后面的处理程序,处理程序的结尾是 Resume after_mapfrom,作用是使处理程序结束后能返回到标号 after_mapfrom 处。 92 MapBasic 基本元素 通过前一节的学习,我们对 MapBasic 的应用程序开发过程有了一个总体了解,这一节重点介绍 MapBasic 语言及其编程方法,目的是让读者学会自己编程解决实际问题。 921 MapBasic 的基本语法规则 1MapBasic 的注释行 在 MapBasic 电用单引号“ ”来标记注释语句。当单引号出现

32、在程序中时,MapBasic就把本行中单引号后面的部分作为程序的注释, 除非单引号是出现在字符串内部而作为字符串的一部分。 2有关字母的大小写 在 MapBasic 中,你可以用大写、小写或混合的方式输入程序。但是为了清楚起见,一般把 MapBasic 语言中关键词的第一个字母大写,而程序中出现的所有变量都用小写。例如下面的例子中 If 和 Then 的第一个字母用大写, 因为它们是 MapBasic 的关键词, 而 counter则以小写方式出现,因为它是一个变量。 If counter 5 Then Note “Counter is too high” End lf 3分行书写一个语句 当

33、你在写一个 MapBasic 程序时,可能一个较长的语句会超过一行所允许的长度。这时可以把一个语句分成两行或多行书写,例如: If counter = 55 Or counter = 34 Then Note “Counter is invalid” End If 4在 MapBasic.def中定义的代码 许多 MapBasic 的语句和函数在调用时不能正常使用,除非在你的程序头部出现下面的语句: Include “MapBasic.def” MapBasic.def 是一个文本文件,其中含有许多标准 MapBasic 代码的定义。作为一个约定的规则,所有该文件中定义的代码都用大写字母书写(

34、例如:TRUE、FALS E、BLACK、WHITE、CMD_INFO_X、 OBJ_INFO_TYPE 等等)。当你在读 MapBasic 程序时,可能会看到许多类似于这样的程序行: If CommandInfo(CMD_INFO_DLG_OK) Then 如果你的程序中出现 MapBaic 的标准代码(如上面的 C MD_INFO_DLG_OK),那么你的程序必须在头部出现一个 Include 语句把MapBasic.def 包括进去, 如果你忽略了 Include语句,那么程序将产生一个运行错误(如“Variable or Field CM D_INFO_DLG_OK not defin

35、ed” 。 922 MapBasic 的变量 MapBasic 关于变量说明及变量赋值的语法规则与其他现代 BASIC 语言类似。但是,MapBasic 比其他 BASIC语言支持更多的变量类型。 1什么是变量 MapBasic 中变量的概念与其他高级语言中是相同的,每一个变量对应一小片内存空间。当备写程序时会发现有许多类型的信息需要暂时存放在内存中,为此你必须命名一个或多个变包如 counter、xyz、cu stomer_name)。这样,我们可以把一些信息存放在变量中,其实是放到该变量对应的内存中。必要时又可以通过变量名引用这些变量以得到变量里所存放的信息。 2,变量的声明与赋值 Dim

36、 语句用来定义变量。使用的变量都要先进行变量声明,并且变量声明必须位于变量使用之前。给一个变量赋值可以用赋值操作符 “=” 。下面的例子中声明了一个整型变量并给它赋了一个值 23: Dim counter As Integer Counter = 23 一个Dim 语句可以同时声明多个变量,每个变量之间用逗号分隔,下面的例子中声明了三个浮点数变量: Dim total_distance, longitude,latitude AS Float longitude = -73.55 latitude = 42.917 一个Dim 的语句也可以同时声明多个类型的变量, 下面的Dim 语句声明了两个

37、日期型变量和两个字符型变量: Dim start_date, end_date As Date First_name, last_name As String 3变量名 变量名的命名必须符合以下规则: 每一个变量名最多可以包含 31个字符。 变量中不能含有空格。 每个变量名必须以字母、下划线“_”或者“”号开头,后面可跟字母、数字、下划线“_”和“#” 。 变量名可以用下列字符中的一个作为结束字符:$,%, resetting to 100 ” Else Note “The counter is ok ” End If 如果 If.Then 语句中包括两个或多个 E1se If 子句,那么 M

38、apBasic 将依次测试每一个条件。但是如果你想测试多于两个或三个不同的条件,使用下面的 Do Case 语句将会更加方便。 2Do Case 语句 Do Case语句完成一系列条件的测试,测试某个表达式是否与期望值列表中的某个值相等。根据哪个位与表达式匹配,MapBasi c 执行不同的指令集。下面的例子是测试当前月份是一年四个季度中的哪一个季度,若是第一季度则给变量 report_title 赋值为 ”First Quarter Results” ,给变量 quarter 赋值为 1。若为第二季度,则给 report_title 赋值为“Second Quarter Results“,给

39、变量 quarter赋值 2,依次类推。 Dim current_mouth,quarter As SmallInt Report_title As String Current_mouth = Mouth(CurDate() 这时,若当前是一月份则 current_mouth 的值为 1 若为二月份,则值为 2,依次类推。 DO Case current_mouth Case 1,2,3 若当前是一月,二月或三月份,则为第一季度 Report_title = ”First Quarter Results” Quarter = 1 Case 4,5,6 Report_title = ”Seco

40、nd Quarter Results” Quarter = 2 Case 7,8,9 Report_title = ”Third Quarter Results” Quarter = 3 Case Else 若当前月份不在 l 到9之间,那么肯定是第四季度 Report_title = ”Fourth Quarter Results” Quarter = 4 End Case 上例中在 Do Case结构的后面有一个 Case Else 句,该子句也是可选的。如果 Do Case语句包括了 Case Else 子句,那么当被测试的表达式与前面的 Case 子句没有一个匹配时,MapBasic

41、执行 Case E lse 子句后面的语句。Case Else 子句必须放在 Do Case 结构的最后。 3GoTo 语句 GoTo 语句告诉 MapBasic 转到程序的不同部分,也可以返回到原来的位置执行。GoTo语句要指定一个标号。 这个标号必须是在同一过程中的某一个地方。 标号是放在行首的名字,每个标号必须以一个冒号结尾。例如: If ccount0 Then GoTo get_out End If . Get_out: End program 虽然 MapBasic 提供 了无条件转移语句 GoTo,但我们一 般不主张在程序中太多地使用GoTo 语句。因为它使程序结构变得不容易读懂

42、,所以除非万不得已,我们应尽量避免使用GoTo 语句。 4For.Next 语句 For.Next 语句建立一个执行特定次数的循环。每执行一次循环,MapBasic 执行 For与 Next 子句之间的所有语句。 当创建一个 For.Next 循环时,你必须先指定一个数值型变量作为计数器。除此以外,还要为计数器变量指定起始值与终止值。每执行一次循环 MapBasic 自动使计数器增加一个步长值, 默认的步长是 1, 为了使用不同的步长, 可以在 For.Next 语句中增加可选的 Step子句。下面的例于是把数组中的值累加起来: Dim monthy_sa1es(12),grand_total

43、 As Float Next_one As SmallInt . For next_one = 1 T0 12 grand_total = grand_total + monthy_sales(next_one) Next 开始时MapBasic 首先把起始值赋值给计数器变量, 如上例中 MapBasic会先把 1 赋值给循环next_one, 然后执行循环体(出现在For和Next之间的语句)每执行一次循环, MapBasic使循环变量加 1。此时若循环变量还是小于或等于终值,则再执行一次循环。 5DoLoop 语句 只要测试条件仍为 TRUE,DoLoop 语句不断地执行一组语句。也可选择

44、当测试条件为FALSE 时不断循环。根据你想在执行循环前测试条件还是在执行循环后测试条件,DoLoop有两种不同的形式,下面的程序是在循环结束时测试循环条件: Dim sales_total,new_accounts(10) As Float, next_one As SmallInt Next_one = 1 Do Sales_total = sales_total+new_accounts(next_one) next one = next_one+1 Loop while next_one=UBound(new_accounts) 这种形式的循环,循环体至少被执行一次,因为循环条件要在循

45、环结束时才被测试。 下面的循环是在环循开始前测试循环条件。由于条件在循环开始前被测试,只要测试条件一开始就是 FALSE,循环体中的语句可能不被执行。 Dim sales_total,new_accounts(10) As Float, next_one As SmallInt Next_one = 1 Do while next_one= UBound(new_accounts) Sales_total = sales_total+new_accounts(next_one) next one = next_one+1 Loop 上面的两个例子中,DoLoop语句都包括了一个关键词 Whil

46、e, 因此,它们都是在条件为 TRUE 时进行循环。作为另一种形式的 DoLoop 语句,也可以使用关键词 Until 而不是While。如果一个 DoLoop 语句使用了 Until,那么只要测试条件为 FALSE, 循环将不断执行。 6While.Wend 循环 MapBasic 支持传统Basic 语言的Wh ileWend循环语句,这个语句与 Do WhileL00p 语句相似。如果你是个有经验的 Basic 程序员,并且以前习惯于使用 WhleWend 循环,那么你可以在 MapBasic 中继续使用它。 但有时 DoLoop 循环比WhileWend 功能更强。 例如:DoLoop

47、 循环中可以用 Exit Do 语句提前结束循环,而 While.Wend 语句中没有相应的语句。 7结束程序 End Program 语句用于终止 MapBasic 应用程序,移去由应用程序创建的用户菜单项,从内存中移去应用程序。End Program 还能关闭 所有被应用程序打开的文件(用 Open File) 语句) ,但它不能关闭任何打开的表。 End Program 语句并不是每一个应用程序都必须的。事实上,有的时候你要很小心地位用该语句。例如:当你在结束应用程序时,想保留你创建的用户菜单项在 MapInfo 中,那么你就不能用 End Program语句。 8结束程序并退出 Msp

48、Info End MapInfo 语句可以终正 Map Basic 应用程序(这一点与 End Program 相同),同时将退出MapInfo。 93 过程与函数 931 过程 过程包含主过程和子过程,是 MapBasic 程序结构中的一个不可缺少的部分。一个典型的 MapBasic程序由许多过程组成,每个过程都包含一组完成某一特定任务的语句。 1主过程与子过程 每一个 MapBasic 程序至少有一个过程,这个过程叫做主过程,其余的过程(称为子过程)都必须由主过程或别的子过程来调用。当你运行一个 MapBasic 应用程序时,MapBasic 自动调用该应用程序的主过程。下面的程序示意如何显式声明一个主过程。在这个例子中主过程只简单地包含一个 Note语句: Declare Sub Main Sub Main Note “Hello from MapBasic!” End Sub Declare Sub 语句告诉 MapBasic 下面将定义一个主过程或子过程。程序中的每一个过程都必须有一个 Declare Sub 语句,并且 Declare Sub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报