回 帖 发 新 帖 刷新版面

主题:关于文件版本号各段数字的提取问题

在VFP中连编的应用程序可以指定版本号,它包括”主要“,”次要“和”修正“三个部分
如何分别提取出版本号的三个部分?
如果分别填写“1”、“1”、“0”,则编译后在资源管理器中查看到的版本号为1.1.0.0,这儿就显示为四段(虽然第四段并非我们填写的)

如果分别填写“2008”、“8”、“9”,则编译后在资源管理器中查看到的版本号为2008.8.9.0,

由于“主要“填写的字符可以为1-4位,因此,使用susbst()函数好像不好操作,因为事先无法知道它有多少位。唯一的识别符号就是“.”(小原点),请问,用什么办法截取出各个部分?(例如第一例中分别提取1、1、0、0四个部分,第二例中提取2008、8、9、0)

回复列表 (共8个回复)

沙发

VFP9SP2之后,MS发布了开源的 Sedna 组件,其中,MY (my.vcx) 中封装了一些东西,可以直接获取应用程序版本信息。

板凳

没搞懂这个什么My.vcx,烦请老师给说一下如何从”1.1.0.0“这个字符串中分别提取出这四段数字吧。谢谢!

3 楼

[quote]唯一的识别符号就是“.”(小原点),[/quote]

4 楼

AGETFILEVERSION( ) 函数 

创建一个数组,其中包含有关文件的 Windows 版本资源的信息,例如 .exe、.dll 和 .fll文件,或在 Visual FoxPro 中创建的自动服务文件。
ArrayName 
指定数组的名称,在该数组中放置文件信息。所指定的数组不存在,Visual FoxPro 会自动创建该数组。如果该数组存在,但是大小不足以容纳文件信息,则 Visual FoxPro 自动增加该数组的大小。如果该数组比所需的要大,则 Visual FoxPro 会截短该数组。下表列出了该数组每个元素的内容。 元素 内容 
1
 注释
 
2
 公司名称
 
3
 文件说明
 
4
 文件版本
 
5
 内部名
 
6
 合法版权
 
7
 合法商标
 
8
 原文件名
 
9
 私有连编
 
10
 产品名
 
11
 产品版本

这个值的格式取决于Visual FoxPro的版本。更多的信息,请参见 VERSION( ) 函数。

 
12
 特殊连编
 
13
 OLE 自注册(如果文件支持自注册,则包含 "OLESelfRegister";否则包含空字符串)
 
14
 语言(从翻译代码导出)
 
15
 翻译代码

例如,可以用以下代码来判断 Visual FoxPro 可执行文件的 Locale ID:

  复制代码 
DIMENSION aFiles[1]
AGETFILEVERSION(aFiles,"VFP9.EXE")
? EVAL("0x"+LEFT(aFiles[15],4))
** Returns 1033 for US version
 
 

cFileName 
指定目标文件的文件名,和可选的路径。 
返回值
数值型。AGETFILEVERSION( ) 返回数组的元素个数。如果所指定的文件没有 Windows 版本资源,会返回零,并且数组(如果已经创建)保持不变。

说明
AGETFILEVERSION( ) 最小可以截短为 5 个字符。



如:
=AGETFILEVERSION(ArrayName, 'pfc60.exe')
ThisForm.Label8.Caption ='版本号:      '+arrayname(4)

5 楼

我希望是分离出版本号的各段,上面的函数只能提取出版本号

问题我已经解决了,共享给大家。

以下语句可以将版本号的三段分开,并转换为数值型。

VER11=VAL(GETWORDNUM(VER1, 1, '.'))
VER12=VAL(GETWORDNUM(VER1, 2, '.'))
VER13=VAL(GETWORDNUM(VER1, 3, '.'))

6 楼

其實用at函數可以吧。

7 楼

at在这儿怎么用,愿闻其详!
At仅仅是求在一个字符表达式中查找另一个字符表达式出现的位置。!!我不是找.的位置!

8 楼

哦,那我理解錯誤。
:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册