这个问题可能是this问题的重复,但我遇到的问题与答案无关。我已经尝试了人们在那里发布的代码,但我无法实现我想要的。 我的代码:
extern type *jagged[];
...
type *jagged[] = { jagged_row_0, jagged_row_1 };
...
printf("jagged[1][0] = %d\n", jagged[1][0]);
上面的代码无法正常工作,但在我包含{}
之后set line H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")
foreach {name value} [string map {( { } ) {} } $line] {
puts "$name $value"
}
它像这样工作
set line {H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")}
但在我的脚本中,$ line仅在列表中。如何获得像这样的纯文本
H_Dev: Issue
with DELETE
funtion in
OSPF OC
Input List
is missing
required key
identifier
答案 0 :(得分:2)
问题在于这一行:
set line H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")
由于您没有引用任何内容,因此您将许多参数传递给set
(由于它没有采用那么多参数会出错),或者会除了"identifier")
看起来像是一个双引词之外,因为它不是因为)
在结束"
之后的原因而导致的错误。
通常的修复方法是双引号整个字符串(在任何内部双引号之前使用反斜杠):
set line "H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key \"identifier\")"
或将整个批次放入大括号(嵌套,使其变得非常容易):
set line {H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")}
要获得所需的字词,您可以使用string map
删除不需要的字符,regsub -all
删除不需要的字符,或regexp -all -inline
选择想要的字词。< / p>
选项一:
set line [string map {{"} {} ( {} ) {}} $line]
选项二:
set line [regsub -all {[("")]} $line ""]
选项三:
set line [regexp -all -inline {[\w]+:?} $line]
我倾向于选择我想要的单词,而不是过滤我不想要的字符,因为对于意外的输入而言,这不太令人惊讶。其他人不同意我的看法。
答案 1 :(得分:0)
你是正确的,你需要使用大括号(或引号,因为你的字符串中有引号而在你的情况下效果不好),如果你想将它分配给带有&#34的变量;设置&#34;命令。如果你没有大括号,那么这会给&#34; set&#34;传递太多的参数。命令。问题是:
flyway.setTargetAsString("1.2.3");
这一次是通过你的字符串两个单词,将它们分配给变量&#34; name&#34;和&#34;价值&#34;并在一行上打印每一对。如果您只想打印整个字符串,请删除foreach行并执行此操作:
foreach {name value} [string map {( { } ) {} } $line] {
puts "$name $value"
}
如果您还试图摆脱parens和braces(从代码中看起来像这样),您可以这样做:
puts $line