Tcl 文件名打印不正确的原因

Tcl 文件名打印不正确的原因,tcl,Tcl,我试图用下面的代码打印一个文件名及其完整路径。根据代码实现,我找到字符串中每个字符的ASCII值,并检查其ASCII值是否为“\”(反斜杠)字符的ASCII值,然后相应地打印: set f "C:\tools\tcl\bin\my.log" for {set i 0} {$i < [string length $f]} {incr i} { set c [scan [string index $f $i] %c] if { $c == 9 } { puts -no

我试图用下面的代码打印一个文件名及其完整路径。根据代码实现,我找到字符串中每个字符的ASCII值,并检查其ASCII值是否为“\”(反斜杠)字符的ASCII值,然后相应地打印:

set f "C:\tools\tcl\bin\my.log"
for {set i 0} {$i < [string length $f]} {incr i} {
   set c [scan [string index $f $i] %c]
   if { $c == 9 } {
       puts -nonewline "\\"
   } else {
      puts -nonewline [string index $f $i]
   }
}
请让我知道如何修复相同的问题


我的问题据说是重复的,但实际上不是。在这个问题中,它是以双引号内的字符串形式打印的,但在这里,我是逐字符打印的,原因是您正在对反斜杠(
\
)后面的字符进行转义()。 您应该使用双反斜杠(
\\
)或大括号来定义文件

总之,您需要将文件定义为:

set f“C:\\tools\\tcl\\bin\\my.log”


set f{C:\tools\tcl\bin\my.log}

原因是您正在对反斜杠(
\
)后面的字符进行转义()。 您应该使用双反斜杠(
\\
)或大括号来定义文件

总之,您需要将文件定义为:

set f“C:\\tools\\tcl\\bin\\my.log”


set f{C:\tools\tcl\bin\my.log}

我的问题不是该问题中另一个问题的重复,它是以双引号内的字符串形式打印的,但我在这里一个字符一个字符地打印它似乎很相关:在代码中,当遇到
9
时,用
\
替换它。。。。但是
9
是制表符的ascii码。你注意到没有显示
\b
\m
?这完全是该问题的重复;如果在文件名中使用反斜杠,请将其放在大括号中,否则字符串将被损坏。(例如,
\b
变成了退格字符,这就是为什么
cl\bin
l
似乎不见了。)我的问题不是该问题中另一个问题的重复,它是以双引号内的字符串形式打印的,但我在这里逐字打印它似乎很相关:在你的代码中,当你遇到一个
9
时,你用一个
\
替换它。。。。但是
9
是制表符的ascii码。你注意到没有显示
\b
\m
?这完全是该问题的重复;如果在文件名中使用反斜杠,请将其放在大括号中,否则字符串将被损坏。(
\b
成为退格字符,例如,这就是为什么
cl\bin
l
似乎丢失的原因。)
C:\ools\cinmy.log