主题:关于文件版本号各段数字的提取问题
ihorse
[专家分:970] 发布于 2008-08-09 20:12:00
在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个回复)
沙发
xinjie [专家分:630] 发布于 2008-08-09 23:38:00
VFP9SP2之后,MS发布了开源的 Sedna 组件,其中,MY (my.vcx) 中封装了一些东西,可以直接获取应用程序版本信息。
板凳
ihorse [专家分:970] 发布于 2008-08-10 06:58:00
没搞懂这个什么My.vcx,烦请老师给说一下如何从”1.1.0.0“这个字符串中分别提取出这四段数字吧。谢谢!
3 楼
xinjie [专家分:630] 发布于 2008-08-10 11:36:00
[quote]唯一的识别符号就是“.”(小原点),[/quote]
4 楼
wzxc [专家分:9440] 发布于 2008-08-10 14:24:00
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 楼
ihorse [专家分:970] 发布于 2008-08-11 07:33:00
我希望是分离出版本号的各段,上面的函数只能提取出版本号
问题我已经解决了,共享给大家。
以下语句可以将版本号的三段分开,并转换为数值型。
VER11=VAL(GETWORDNUM(VER1, 1, '.'))
VER12=VAL(GETWORDNUM(VER1, 2, '.'))
VER13=VAL(GETWORDNUM(VER1, 3, '.'))
6 楼
yzzd2167 [专家分:550] 发布于 2008-08-11 08:38:00
其實用at函數可以吧。
7 楼
ihorse [专家分:970] 发布于 2008-08-11 14:46:00
at在这儿怎么用,愿闻其详!
At仅仅是求在一个字符表达式中查找另一个字符表达式出现的位置。!!我不是找.的位置!
8 楼
yzzd2167 [专家分:550] 发布于 2008-08-11 17:22:00
哦,那我理解錯誤。
:)
我来回复