我有一堆数据我通过Tcl解析但在字符串上使用lindex
时会遇到问题,因为它包含反斜杠。
例如,
$data is a list split by lines,
{123 somethinghere/somethingthere/\idontcare 123ff}
{456 apples/oranges/\bananas 921}
{999 pikachu/ratata/\snorlax ftp}
我循环$data
并使用lindex
拆分此数据并根据其类型对其进行分组:
foreach item $data {
set num [lindex $item 0]
set paths [lindex $item 1]
set output [lindex $item 2]
}
不幸的是,反斜杠会逃避我想要的文字。
puts "$paths"
somethinghere/somethingthere/dontcare
理想情况下,我甚至不想保留反斜杠。我在[{1}}上的首选数据是:
$path
连连呢?我不想使用正则表达式,除非这是唯一的方法。
答案 0 :(得分:5)
列表的第一条规则是:不要将非列表内容视为列表(嗯,有例外,但您的数据是一个很好的例子,为什么您应遵循99%的规则案件)。
要将字符串正确转换为列表,请使用set i [split $item " "]
:
regexp
如果拆分字符是可变的或多个字符使用set i [regexp -inline -all {\S+} $item]
:
\
通过使用返回列表的命令,您可以确保获得正确的列表。除非你100%确定(例外)字符串并不总是可以解析为列表。
现在,关于如何摆脱set item [regsub -all {\\} $item]
。你当然可以使用正则表达式:
string map
但是有一种更好的方法可以在不使用正则表达式的情况下执行此操作(我相信您会很感激),使用set item [string map {"\\" ""} $item]
:
fscanf()