繁体   English   中英

TCL将文本字符串拆分为多个变量(eggdrop)

[英]TCL split text string to multiple variables (eggdrop)

我正在使用mysql选择和插入脚本,但是在将一行提取到两个变量中遇到问题。

该行作为变量$ arg传递,并由以下内容组成:“ text field 1 = text field 2”我尝试使用“ =”作为分隔符通过regexp将$ arg拆分为$ arg1和$ arg2,但是我总是和整行被解析为$ arg2,而$ arg1为空。

regexp -- {(\S+)=(\S+)} $arg null $arg1 $arg2

我已经尝试过使用regexp和更改分隔符的几种方法,但是结果保持不变。 这是通过tcl v8.5完成的。

我对tcl不太熟悉,所以我怀疑这主要是由于对tcl / tk的理解滞后。

使用变量的名称,而不是变量值本身:

regexp -- {(\S+)=(\S+)} $arg null arg1 arg2

如果您使用$var1 ,它将在调用命令之前被该变量的值替换,这时该命令对使用了哪个变量一无所知。

您也可以使用split作为替代:

% set results [split $arg "="]

这将为您提供包含要查找的两个部分的列表。

然后,您可以使用lindex来引用每个元素。

% puts [lindex $results 0]
text field 1
% puts [lindex $results 1]
text field 2

或者,如果要将它们存储在变量arg1arg2 ,则可以使用lassign

% lassign $results arg1 arg2
% puts $arg1
text field 1
% puts $arg2
text field 2

解析这些事情时,应注意仅完全符合您的期望。 (您需要记住,每当使用Tcl分配变量时,都需要提供变量名称 arg1 ,而不是变量内容 $arg1 。)

regexp -- {([^\s=])=(\S+)} $arg null arg1 arg2

您还应该检查该regexp调用的结果,以查看RE是否匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM