Tcl 如何用数字分割字符串

Tcl 如何用数字分割字符串,tcl,Tcl,我试过分手,但还是失败了 set strdata "34a64323R6662w0332665323020346t534r66662v43037333444533053534a64323R6662w0332665323020346t534r66662v430373334445330535" puts [split $strdata "3334445330535"] ;#<---- this command does not work The result needed as below

我试过分手,但还是失败了

set strdata "34a64323R6662w0332665323020346t534r66662v43037333444533053534a64323R6662w0332665323020346t534r66662v430373334445330535"

puts [split $strdata "3334445330535"] ;#<---- this command does not work

The result needed as below:
{34a64323R6662w0332665323020346t534r66662v43037} {34a64323R6662w0332665323020346t534r66662v43037}
设置标准数据“34A64323R6662W033265323020346T534R66662V43037334453305334A64323R6662W033266523020346T534R66662V4303733445330535”

卖出[分割$strdata“3334445330535”]#
split
命令不是这样工作的,请参阅文档

尝试将数据字符串放入如下列表:

regsub -all 3334445330535 $strdata " "
i、 e.用空格替换分隔符

文件: ,

split
命令的可选第二个参数被解释为一组要拆分的字符,因此它实际上不会执行您想要的操作。然而,还有其他方法。执行所需操作的一种简单方法是使用
字符串映射
将字符序列转换为不在输入数据中的字符(Unicode中充满了这些字符!),然后对其进行
拆分

set strdata "34a64323R6662w0332665323020346t534r66662v43037333444533053534a64323R6662w0332665323020346t534r66662v430373334445330535"
set splitterm "3334445330535"

set items [split [string map [list $splitterm "\uFFFF"] $strdata] "\uFFFF"]
foreach i $items {
    puts "==> $i"
}
# ==> 34a64323R6662w0332665323020346t534r66662v43037
# ==> 34a64323R6662w0332665323020346t534r66662v43037
# ==> {}
请注意,末尾有一个
{}
(即一个空字符串列表元素),因为这是最后一个拆分元素之后的字符串。如果不希望这样,请在
字符串映射
拆分
之间添加一个
字符串trimright

# Doing this in steps because the line is a bit long otherwise
set mapped  [string map [list $splitterm "\uFFFF"] $strdata]
set trimmed [string trimright $mapped "\uFFFF"]
set items   [split $trimmed "\uFFFF"]

我们使用tcllib
textutil::splitx
,它基本上符合您的建议。谢谢。“\uFFFF”是什么意思?它是unicode字符的转义版本,在普通文本或二进制数据中不会出现;根据Unicode联盟的说法,我认为它在序列化字符串中实际上是无效的。这在这里没关系,因为我们只是暂时借用它作为拆分位置的标记;它没有别的意思。