如何判斷兩個文件版本的不同﹖(30分)

  • 主题发起人 主题发起人 databox
  • 开始时间 开始时间
D

databox

Unregistered / Unconfirmed
GUEST, unregistred user!
請問有沒有一個函數來判斷兩個版本之間的大小﹖
比如說3.2.3.1345(A)和1.7.2.12123(B)兩文件。
我怎么來判斷呢﹖
A的第一位比B的第一位大﹐A的第二位又比B的第一位小﹐A的第三位又比B第一位大﹐A的
第四位又比B的第四位小。若有專門來判斷的函數﹐我就不說了﹐假如沒有﹐我可覺得真有
點難判斷。還有下面的3.1.2.5和3.2.5.5
 
直接作字符比较就可以
'3.2.3.1345(A)'>'1.7.2.12123(B)'
'3.1.2.5'<'3.2.5.5'
 
Brave, 我没有加上"."号,照你上面来
s1:=1121345;ver:1.1.2.1345
s2:=11503;ver:1.15.0.3
照理说,s1应该比s2大,因为照数字来,他的数值要长一些,也应该大一些?为何却小一些呢?
能说说其中理由吗?我不加上"."应该也可以吧?
 
字符串的比较是逐个字符比较ascii的,不管长度
发现相同位置的s1<s2,则比较就结束,例如 '5'>'4000'
所以'.'的ascii是42,数字的是48开始,比'.'大,所以加上'.'才能正常按字符串比较
 
嘿嘿,第一次来,大家好啊
 
//如果V1>V2 返回1 ,否则返回-1 相等返回0
function TForm1.CompVer(V1, V2: string): integer;
var
; tmpV1, tmpV2: TStringList;
; intV1, intV2: integer;
; i: integer;
begin
; Result:=0;
; tmpV1:=TStringList.Create;
; tmpV2:=TStringList.Create;
; tmpV1.Text:=StringReplace(V1,'.',#13#10,[rfReplaceAll, rfIgnoreCase]);
; tmpV2.Text:=StringReplace(V2,'.',#13#10, [rfReplaceAll, rfIgnoreCase]);
; FormatString(tmpV1, tmpV2);

; for i:=0 to tmpV1.Count-1 do
; begin
; ; intV1:=StrToInt(tmpV1.Strings);
; ; intV2:=StrToInt(tmpV2.Strings);
; ;
; ; if intV1 = intV2 then continue;

; ; if intV1 > intV2 then
; ; ; Result:=1
; ; else Result:=-1;

; ; exit;
; end;
; tmpV1.Free;
; tmpV2.Free;
end;

//格式化版本号,使两的‘.’相等
procedure TForm1.FormatString(var V1, V2: TStringList);
var
; VCount, i: integer;
begin
; VCount:=V1.Count-V2.Count;
; if VCount > 0 then
; ; for i:=1 to VCount do V2.Add('0')
; else for i:=VCount to -1 do V1.Add('0');
end;

用这个则试一下
; Label1.Caption:=inttostr( CompVer(Edit1.Text, Edit2.Text));
 
謝謝二位﹗不好意思﹐分數少了點.
 
后退
顶部