1

我正在为我的公司开发一个项目,但不知道如何从变量中提取值,让我们称之为“a”并在文件名中使用它。

所以,如果 a 的值是 1234,那么作为一个例子,我希望文件名是 1234_abc.pcm 我想也许我可以使用美元符号从 'a' 中读取值,但这不起作用,每个组合我可以想到使用大括号和方括号以及括号都没有达到终点。一整天都没有用。我最终得到 $a_abc.pcm 作为文件名。任何想法/想法都会有很大帮助!

提前致谢,

ButtahNRed

4

4 回答 4

3

我打赌你正在这样做:

set filename "c:\0000\${a}_abc.pcm"

您认为是目录分隔符的第二个反斜杠实际上是在转义$,从而防止变量替换 [*]。

选择以下备选方案之一:

set filename "c:\\0000\\${a}_abc.pcm"
set filename "c:/0000/${a}_abc.pcm"
set filename [format {c:\0000\%s_abc.pcm} $a]
set filename [file join c: 0000 ${a}_abc.pcm]  ;# my preferred solution

Windows 可以很好地处理正斜杠)

[*] 它实际上比这更糟糕:因为\000你实际上得到了一个 NUL 字节。我不熟悉 Tcl 的字符串实现以及 NUL 的作用,但是:

$ tclsh <<< 'set a 1234; puts "c:\0000\${a}_foo"' | od -c
0000000   c   :  \0   0   $   {   a   }   _   f   o   o  \n
0000015
于 2013-06-26T11:12:14.113 回答
2

听起来你正在寻找这样的东西?

set a "1234"
set suffix "_abc.pcm"
set filename "${a}${suffix}"
于 2013-06-25T21:51:03.953 回答
0

正如格伦杰克曼指出的那样;您的问题可能是由反斜杠引起的。

为避免这些问题,您应该使用file命令来构建文件名 -

% set a 1234
1234
% set filename [file join c:/ 0000 ${a}_abc.pcm
c:/0000/1234_abc.pcm
% nativeFilename [file join nativename $filename]
c:\0000\1234_abc.pcm

如果您打算在 Tcl 中使用文件名 - 例如在open语句中,您不需要使用file nativename.

file如果您正在编写可在 Windows、Unix 和 Mac 之间移植的代码,则使用该命令是必不可少的。即使您不是,它也将有助于避免反斜杠问题。

于 2013-06-26T11:26:17.070 回答
0

幸运的是,在与工作人员讨论后,我们发现使用此命令 {C:\0000\ } 设置录制目录最简单,然后附加序列号,以便目录和文件名存在。

正斜杠对我们不起作用,所以我想我们的软件将正斜杠识别为目录和文件名分隔符存在问题。

于 2013-06-26T15:13:10.510 回答