如何将包含单个正斜杠的网络文件路径作为tcl proc的参数?

问题描述 投票:0回答:3

在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中,在将文件路径传递到过程时,单斜杠被视为转义符,因此在所有位置都将其删除。如果我稍后在过程中使用{}传递参数,则无法...

tcl parameter-passing filepath
3个回答
0
投票

split命令分割字符,而不是字符串。按要求将其拆分为“ B”,“ 4”,“ 1”和“ 9”,并且返回值正确。


0
投票

\字符在Tcl源代码中是特殊的,因为它用作转义序列的开头(例如\n是换行符的转义序列,\\是反斜杠字符本身)。这意味着,如果您希望这样的字符的值源自脚本的文本,则需要对其进行转义(或对其自身进行转义),或者将整个字符串放在{ curles大括号}中,以禁用所有替换内。 (双引号仅影响对空格的解释。)


0
投票

要按字符串分割,也可以使用textutil :: split :: splitx命令。

© www.soinside.com 2019 - 2024. All rights reserved.