第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言
的联系
14.1 FoxPro与其它语言交换数据的方法
14.2 库文件与文本文件的数据交换
14.3 直接调用其它高级语言的命令
—— RUN
14.4 调用汇编语言子程序
第 14章 FoxPro与其它语言的联系
14.1 FoxPro与其它语言交换数据的方法
1,交换数据的基本方法
一般,FoxPro与其它语言程序是通过文本文件来相
互交换数据的 。 但是,只有具有 SDF格式 (系统数据格
式 )或 DELIMTED格式 (用户定义分隔符格式 )的文本文
件才能完成这个任务,图 14[CD*2]1描绘了这种交换数
据的方法 。
第 14章 FoxPro与其它语言的联系
图 14— 1 FoxPro与其它语言程序交换数据法
第 14章 FoxPro与其它语言的联系
FoxPro可以利用自己的命令把库文件的数据传送
给具有 SDF格式或 DELIMITED格式的文本文件 ; 也可
以用自己的命令,从具有 SDF格式或 DILIMITED格式的
文本文件中读入数据并构成库文件的记录 。 但这两种
方法不涉及库文件的记忆型字段 。
任何一种其它语言程序,都可利用自己的命令,从
具有 SDF格式或 DELIMITED格式的文本文件中为自己
的变量读入数据 ; 或用自己的命令,把自己程序运行的
结果数据传送给具有 SDF格式或 DELIMITED格式的文
本文件 。
第 14章 FoxPro与其它语言的联系
2,SDF格式文本文件
SDF格式文本文件称为系统数据格式文本文件,它
在格式上与库文件有着很多相似之处 。 首先,每一个字
段的宽度是固定的,等于原库文件中该字段的定义宽度,
因此各记录的长度也是相同的 。
在 SDF格式文本文件中,原库文件的字符型字段和
数字型字段数据将原样存储,即字符型数据左对齐存放,
右边不足部分填以空格 ; 数字型数据右对齐存放,左边
不足部分填以空格 。
第 14章 FoxPro与其它语言的联系
3,DELIMITED格式文本文件
DELIMITED格式文本文件又称为用户定义分隔符
格式文本文件或紧凑格式文本文件 。 它和 SDF格式的
差别在于,
① 同一字段中,各字段值的宽度不再固定为原字段
定义宽度,而是等于字段值的实际宽度 。 也即,原字符
型数据的尾部空格和原数字型数据的头部空格都被删去 。
② 在同一记录中,各数据项之间用分隔符隔开 。
(表 14—2的分隔符为逗号,表 14—3 的分隔符为空格 。 )
③ 原字符型数据还有单独的标界符 (表 14—2中为双
引号 ; 表 14—3是特殊情况,没有单独标界符 )定界 。
第 14章 FoxPro与其它语言的联系
14.2 库文件与文本文件的数据交换
FoxPro可以用自己的命令把库文件数据传送给具
有 SDF格式或 DELIMITED格式的文本文件,也可以用
自己的命令从相应的 SDF格式或 DELIMITED格式文本
文件提取数据给库文件 (组成新的记录 )。
1,库文件数据传送给文本文件
(1) 生成 SDF格式文本文件 。
在 FoxPro状态下,把当前库文件内容传送给 SDF格
式文本文件的命令为,
第 14章 FoxPro与其它语言的联系
COPY TO 〈 文件名 〉 [ FOR〈 条件 〉 ]
[ WHILE〈 条件 〉 ] [ 〈 范围 〉 ]
[ FIELDS〈 字段名表 〉 ] [ TYPE] SDF
功能, 此命令把当前库文件中指定范围内符合条件
记录的指定字段,按 SDF格式复制到命令中规定的文本
文件中 。 命令中若无范围项,则范围为 ALL; 若无
FIELDS项,则复制全部字段 (除记忆型 ); 若无条件项,则
复制范围内全部记录 。 〈 文件名 〉 默认扩展名为
.TXT。 TYPE项可省略 。
第 14章 FoxPro与其它语言的联系
例 1
USE 职工
COPY TO ZGS SDF
TYPE ZGS.TXT
输出 SDF格式文本文件 ZGS.TXT,结果见表 14— 1。
(2) 生成 DELIMITED格式文本文件
命令格式, COPY TO 〈 文本文件名 〉 [ FOR
〈 条件 〉 ] [ WHILE〈 条件 〉 ]
[ 〈 范围 〉 ] [ FIELDS〈 字段名清单 〉 ] [ TYPE]
DELIMITED[ WITH〈 分界符 〉 ]
第 14章 FoxPro与其它语言的联系
功能, 此命令把当前库文件中指定范围内符合条件
记录的指定字段,按 DELIMITED格式复制到命令中规定
的文本文件中 。 命令中若无范围项,则范围为 ALL; 若无
FIELDS项,则复制全部字段 (除记忆型字段 ); 若无条件项,
则复制范围内全部记录 。 命令中文本文件的默认扩展名
为,TXT; 若无分界符项,则原字符型字段数据都用双引号
括起 ; 若用分界符项,则原字符型字段数据都用分界符括
起 ; 同一记录的各字段值之间一般都用逗号分隔,但当分
界符是 BLANK时,同一记录的各字段值之间将用空格分
隔 。 TYPE项可省略 。
第 14章 FoxPro与其它语言的联系
例 2 USE 职工
COPY TO ZGDS DELIMITED
TYPE ZGDS.TXT
输出结果见表 14—2。
例 3
USE 职工
COPY TO ZGDB DELIMITED WITH BLANK
TYPE ZGDB.TXT 输出结果见表 14—3。
自己定义分界符后,字符串中就可以包含逗号 。
当然,所有分界符必须不在字符数据中出现 。
第 14章 FoxPro与其它语言的联系
2,文本文件内容传送给库文件
(1) SDF格式文本文件内容传送给库文件 。
在 FoxPro状态下,把 SDF格式文本文件内容追加入当
前库文件的命令为,
APPEND FROM 〈 文件名 〉
[ FIELDS〈 字段名清单 〉 ]
[ FOR〈 条件 〉 ] [ TYPE] SDF
功能, 把指定 SDF格式文本文件内容中符合 〈 条件 〉
者,追加入当前库文件 。 在无 〈 条件 〉 时,全部追加 ; 否
则,只追加符合条件者 。 在无 [ FIELDS] 项时,为所有
字段追加数据 ; 否则,只为指定字段追加数据 。
第 14章 FoxPro与其它语言的联系
步骤, 以当前库文件的字段宽度为准,逐个字段地为
一条记录的指定字段读入数据 。 若在 SDF格式文本文件
中遇到了回车换行符,则在库文件中开始追加新的一条
记录 (在刚才追加的那条记录中,可能最后还有指定字段
未输入数据 ); 若库文件中一条记录的所有指定字段都已
顺次追加完数据,则在 SDF格式文本文件中跳到下面一
个回车换行符后,再开始为库文件追加新的一条记录
(SDF文件中,刚才被读的那一行的最后一些数据,可能未
用到 ); 若在库文件中遇到一个记忆型字段,系统也认为
一条记录已追加完毕 。
第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言的联系
(2) DELIMITED格式文本文件内容传送给库文件 。
在 FoxPro状态下,追加 DELIMITED格式文件内容到
当前库文件的命令为,
APPEND FROM 〈 文件名 〉
[ FIELDS〈 字段名清单 〉 ] [ FOR〈 条件 〉 ]
[ TYPE] DELIMITED [ WITH〈 分界符 〉 ]
功能, 此命令把命令中给出的 DELIMITED格式文
本文件内容中的符合 〈 条件 〉 者,追加入当前库文件 。
命令中 〈 文件名 〉 的默认扩展名为,TXT。 在无
FIELDS项时,。
第 14章 FoxPro与其它语言的联系
步骤, 顺次为追加记录的指定字段读入数据 。 库文件
的一个记录追加完毕,则在文本文件中跳到下一个回车换
行符后,开始为新记录追加数据 ; 若在文本文件中遇到一
个回车换行符,则结束正在追加的记录,再开始追加一个
新记录 ; 若在库文件中遇到一个记忆型字段,则结束追加
本记录,在文本文件中跳到一个回车换行符后,开始追加
一个新记录,直至结束 。
第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言的联系
第 14章 FoxPro与其它语言的联系
由上可知,SDF格式的文本文件只能被追加 SDF格式
的 APPEND命令使用,DELIMITED 格式文本文件也只
能被追加 DELIMITED格式的 APPEND命令使用 。 而且,
一定分界符的 DELIMITED格式文件也只能被规定了同样
分界符的 APPEND命令使用 。 因此, 是选择第一条 SDF
命令; 还是选择第二条 DELIMITED命令 ; 如果选
DELIMITED命令到底选择什么分界符; 这些都完全取
决于被读文本文件 。
第 14章 FoxPro与其它语言的联系
14.3 直接调用其它高级语言
的命令 —— RUN
1,RUN命令
有两种命令格式,
RUN [ /N[ K]] 〈 外部可执行文件名 〉 /〈 MS—
DOS命令 〉 ! [ /N[ K]] 〈 外部可执行文件名 〉 /
〈 MS— DOS命令 〉
在 MS—DOS支持下使用 RUN命令时,操作系统文
件 COMMAND.COM必须在当前目录中或在能被 MS—
DOS COMSPEC找到的位置 (见 MS—DOS手册中有关
SET COMSPEC 内容 )。
第 14章 FoxPro与其它语言的联系
在 FoxPro中,有一个名为 FoxSwap的内存管理实用
程序,它为 RUN命令提供了更多的内存空间 。 选择项 /N
或 /NK指定该 RUN命令所用内存空间量 。 N为一个数
值,单位为 KB。 当 N=0时,该 RUN命令将得到最大的内
存空间 。 当 N> 0时,则,
① 缓冲区内容写进磁盘 ;
② 或内存中有 N(KB)可用空间,则执行该 RUN命令 ;
否则,执行 FoxSwap。
第 14章 FoxPro与其它语言的联系
例 下列命令提供 120 KB内存空间,执行外部文本
编辑程序 ——MYEDITOR。
! /120 MYEDITOR
注意,不要规定超过需要的内存空间,FoxSwap要
花费额外的时间。
第 14章 FoxPro与其它语言的联系
14.4 调用汇编语言子程序
FoxPro可直接调用汇编语言程序,主要使用三条命令 。
1,LOAD命令
命令格式, LOAD 〈 文件名 〉 [ SAVE] [ NOSAVE]
本命令把一个二进制程序装入内存,供 FoxPro的
CALL命令调用 。 该 〈 文件名 〉 的默认扩展名为,BIN。
若 〈 文件名 〉 与已装入内容的某文件同名,即使扩展名不
同,也将覆盖前已装入内存的文件 。 在内存中,最多可同
时存在 16个 64 KB的这类文件 。
第 14章 FoxPro与其它语言的联系
在 LOAD命令和 CALL命令中,可使用选择项 SAVE及
NOSAVE(NOSAVE是默认值 ) 。 在 CALL中的 SAVE、
NOSAVE 优先于 LOAD 中的 SAVE, NOSAVE 。 选择
SAVE后,一从二进制文件返回, FoxPro将把显示器 RAM
的内容复制到 FoxPro 桌面或主窗口 (假定二进制文件
直接写进显示器 RAM)。
一般地,不要选用 SAVE项,因为它将花费一些额外时间 。
在建立二进制代码文件时,应注意, 程序的第一条可执
行指令必须放在偏移量为 0处 ; 不允许程序使用超出其本身
大小的存储区域 ; 程序不得改变在 DS:BX中作为自变量的
内存变量的长度 ; 返回 FoxPro前,应恢复 CS和 SS寄存器 ; 应
以远程返回指令返回 FoxPro,否则只能被 RUN命令调用 。
(不能用 LOAD和 CALL命令来调用 。 )
第 14章 FoxPro与其它语言的联系
建立汇编文件的步骤如下,
① 用 MASM〈 文件名 〉 对源文件进行汇编,产生一
个目标文件 ;
② 用 LINK〈 文件名 〉 连接目标文件,生成一个可
执行文件 ;
③ 用 EXE2BIN〈 文件名 〉 产生二进制文件 。
当使用字符型变量时,不能改变其值长度 ; 当从一
个调用到下一个调用而存储字符串地址时,也应重新设
置已经用过而又准备存入新内容的字符串地址 。
第 14章 FoxPro与其它语言的联系
2,CALL命令
格式, CALL 〈 文件名 〉 [ WITH〈 字符表达式 〉 /
〈 内存变量 〉 ] [ SAVE/NOSAVE]
功能, 执行由 LOAD命令装入内存的二进制代码文
件,〈 文件名 〉 不用扩展名 。
WITH选择项用于向调用的二进制程序传递参数 。
CALL命令使代码段 (CS)指向被调用模块的起始处,
DS和 BX寄存器组指向由 WITH传递参数的第一字节 。
若命令中未选用 WITH项,则 BX内容为 0。 SAVE和
NOSAVE选择项的使用见 LOAD命令 。
第 14章 FoxPro与其它语言的联系
3,RELEASE MODULE命令
格式, RELEASE MODULE 〈 二进制文件名 〉
功能, 清除内存中该 〈 二进制文件 〉,以便用户装
入其它二进制文件。