tcl中两个字母数字值的比较
谁能帮我比较一下tcl中的两个字母数字值 如果说我有两个版本的值tcl中两个字母数字值的比较,tcl,Tcl,谁能帮我比较一下tcl中的两个字母数字值 如果说我有两个版本的值 set val1 "2.1.a" set val2 "1.2.a" 如果我想得到两个值的最大值,即$val1(根据上面的例子),我该怎么做 除了逐字比较,还有什么办法吗 可能的值集: 1.0 1.1a 1.2.3f 2.1 提前感谢。尝试以下操作: set val1 "2.1.a" puts $val1 set val2 "1.2.a" puts $val2 puts [string compare $val2 $val1]
set val1 "2.1.a"
set val2 "1.2.a"
如果我想得到两个值的最大值,即$val1(根据上面的例子),我该怎么做
除了逐字比较,还有什么办法吗
可能的值集:
1.0
1.1a
1.2.3f
2.1
提前感谢。尝试以下操作:
set val1 "2.1.a"
puts $val1
set val2 "1.2.a"
puts $val2
puts [string compare $val2 $val1]
它对字符串string1和string2执行逐字符比较。返回-1、0或1,具体取决于string1在字典上是否小于、等于或大于string2
仔细查看更多细节;
希望它能解决您的问题。我会将版本字符串分解成一个列表,逐一比较:
# Breaks the version string into a list of tokens
proc tokenize {v} {
set v [string map { " " "" } $v]
set result {}
foreach token [split $v ".-"] {
set tokens_scanned [scan $token "%d%s" number alpha]
if {$tokens_scanned == 0} {lappend result $token} ;# is alpha, e.g. beta
if {$tokens_scanned == 1} {lappend result $number} ;# is number, e.g. 5
if {$tokens_scanned == 2} {lappend result $number $alpha} ;# is both, e.g. 5beta
}
return $result
}
# Examples of versions this function handles:
# 1, 1a, 1.5, 3.2b, 3.2.1, 3.2.1-beta1
proc compare_version {v1 v2} {
# Sanitize the data
set v1 [tokenize $v1]
set v2 [tokenize $v2]
foreach token1 $v1 token2 $v2 {
if {$token1 < $token2} { return -1 }
if {$token1 > $token2} { return 1 }
}
return 0
}
#将版本字符串拆分为标记列表
proc标记化{v}{
set v[字符串映射{“”}$v]
设置结果{}
foreach代币[分割$v.“-”]{
设置令牌\u已扫描[扫描$令牌“%d%s”编号alpha]
如果{$tokens_scanned==0}{lappend result$token};#是alpha,例如beta
如果{$tokens_scanned==1}{lappend result$number};#是数字,例如5
如果{$tokens_scanned==2}{lappend result$number$alpha};#两者都是,例如5beta
}
返回$result
}
#此函数处理的版本示例:
#1,1a,1.5,3.2b,3.2.1,3.2.1-β1
进程比较_版本{v1 v2}{
#清理数据
设置v1[标记化$v1]
设置v2[标记化$v2]
foreach令牌1$v1令牌2$v2{
如果{$token1<$token2}{return-1}
如果{$token1>$token2}{return 1}
}
返回0
}
根据Tcl文档,要比较Tcl中的两个版本号,应使用package命令:
package vcompare version1 version2
比较版本1和版本2给出的两个版本号。如果版本1比版本2早,则返回-1;如果它们相等,则返回0;如果版本1比版本2晚,则返回1。这里是。如果您的版本控制系统更简单,您可以只使用
package vcompare$val1$val2
。对于这些字符串,我认为您必须更好地指定“max”的含义。“2.1.a”是否小于、等于或大于“2.1a”?“1.2.3b”是否小于“1.2.3”?