5

配列を作成するために、設定された量のパラメーターを受け入れる必要があるプロシージャがあります。各行のパラメータの情報が記載されたcsvファイルがあります。コマンド[split$line、]を使用すると、プロシージャが7または8個の引数ではなく1つの引数として扱うことを除いて、間にスペースを入れて情報を返します。次のようなcsv行を取得するにはどうすればよいですか。

 day-month-year,34,3,12,5,1,54,21,$big money

次のような複数の引数と見なされます。

 date num1 num2 num3 num4 num5 num6 num7 money

または次のようなバリエーション:

 day month year num1 ... num7 big money

splitコマンドは以下を返します:

 date num1 num2 num3 num4 num5 num6 num7 {big money}

これは、単一の引数として扱われることを除いては問題ありません。私の電話は次のようになります。

 procName [split $line ,]

ありがとうございました。

4

1 に答える 1

8

Tcl バージョン 8.5 以降を使用している場合:

procName {*}[split $line ,]

Tcl バージョン 8.4 を使用している場合、{*} コンストラクトはまだ存在していません。次のようにするしかありません。

eval procName [split $line ,]

特に入力が不明なソースからのものである場合、eval は安全ではない可能性があることに注意してください。

アップデート

{*} コンストラクトはArgument Expansionと呼ばれます。私がそれについて知っているのはこれだけです:

procName {*}{a b c}

以下と同じです:

procName a b c

この機能は、Tcl Improvements Proposal (TIP) 293で提案され、 Tcl'er Wikiで議論されました。

于 2013-03-18T00:47:09.487 に答える