在TCL中,在将文件路径传递到过程时,单斜杠被视为转义符,因此在所有位置都将其删除。如果我稍后在过程中使用{}传递参数,则无法将其转换回正常路径以进行任何替换操作。分割功能无法正确将花括号中的字符串分割开。
事物尝试:我正在尝试将包含单和双反字反斜杠(\)的完整文件路径传递给tcl过程,以将路径的第一部分替换为其他路径。我尝试了以下1.尝试通过共享目录路径,因为结果是:所有反斜杠都消失了2.尝试以大括号形式发送文件路径结果:字符串按原样传递,但无法在proc中操作。如果我尝试分割路径,那么结果会很奇怪。随机位置的分割和随机字符丢失。3.在第二个用例中,我也尝试了文件拆分,但其结果仍与用例2相同。4.还尝试了文件拆分功能,但是它需要编写一个for循环,因此我将其保留为解决方法,但是有没有简单的过程。还是我做错了?
代码:
proc modpath {strPath} {
puts "$strpath" REM result /HuL0GBMV4087.example.comyourPLMB419CATEnvDevPerVisulisationV6R2017.txt
}
set fDir "\\HuL0GBMV4087.example.com\yourPLM\B419\CATEnv\Dev\Per\Visulisation\V6R2017.txt"
modpath $fDir
如果我使用花括号将>]
proc modpath {strPath} { puts "$strpath" REM result "//HuL0GBMV4087.example.com/yourPLM/B419/CATEnv/Dev/Per/Visulisation/V6R2017.txt" set PathInfo [split $strCurrentCockpitPath "B419"] puts "PathInfo : $PathInfo" REM result PathInfo : {"//HuL0G} MV 087.example.com/yourPLM/ {} {} {} /CATEnv/Dev/Per/Visulisation/V6R20 7.txt\" } set fDir {"\\HuL0GBMV4087.example.com\yourPLM\B419\CATEnv\Dev\Per\Visulisation\V6R2017.txt"} modpath $fDir
我希望如果我可以使用花括号将参数传递出去,那么split函数应该可以正常工作,从而为我提供正常的字符串split输出。我也尝试过使用split进行许多变体,但无法使其正常工作。
在TCL中,在将文件路径传递到过程时,单斜杠被视为转义符,因此在所有位置都将其删除。如果我稍后在过程中使用{}传递参数,则无法...
split命令分割字符,而不是字符串。按要求将其拆分为“ B”,“ 4”,“ 1”和“ 9”,并且返回值正确。
\
字符在Tcl源代码中是特殊的,因为它用作转义序列的开头(例如\n
是换行符的转义序列,\\
是反斜杠字符本身)。这意味着,如果您希望这样的字符的值源自脚本的文本,则需要对其进行转义(或对其自身进行转义),或者将整个字符串放在{
curles大括号}
中,以禁用所有替换内。 (双引号仅影响对空格的解释。)
要按字符串分割,也可以使用textutil :: split :: splitx命令。