簡體   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