1

私は自分の会社のプロジェクトに取り組んでいますが、変数から値を抽出する方法がわかりません。それを「a」と呼び、ファイル名で使用しましょう。

したがって、a の値が 1234 の場合、例として、ファイル名を 1234_abc.pcm にする必要があります中括弧と角括弧、および括弧を使用することを考えることができましたが、フィニッシュラインには達していません. 一日中何も機能していません。ファイル名として $a_abc.pcm を取得することになります。どんな考え/アイデアも大いに役立ちます!

前もって感謝します、

ブッタNBレッド

4

4 に答える 4

3

私はあなたがこれをやっているに違いない:

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

ディレクトリ区切り文字だと思われる 2 番目のバックスラッシュは、実際には をエスケープしており$、変数の置換 [*] を妨げています。

次のいずれかの方法を選択してください。

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

fileWindows、Unix、および Mac 間で移植可能なコードを作成する場合、このコマンドの使用は不可欠です。そうでない場合でも、バックスラッシュの問題を回避するのに役立ちます。

于 2013-06-26T11:26:17.070 に答える