2016-03-28 8 views
0

私はTCL言語を学び始めているので、質問は少しシンプルかもしれません。私はベクトルから行列を構築しようとしています。以前に尋ねられた質問を見て、次の考えを見つけました:手続きをファイルに保存

set phi_x [lrepeat 36 [lrepeat 12 0.]] 

私のベクトルリストを作成します。次に、リストのベクトルにlsetコマンドを入力します。このコードは正常に動作します

proc printMatrix {myMatrix} { 

set height [llength [lindex $myMatrix]] 
set width [llength [lindex $myMatrix 0]] 
for {set j 0} {$j < $width} {incr j} { 
    puts -nonewline \Phi$j 
} 
puts "" 
for {set i 0} {$i < $height} {incr i} { 
    puts -nonewline $i 
    for {set j 0} {$j < $width} {incr j} { 
     puts -nonewline \t[lindex $myMatrix $i $j] 
    } 
    puts "" 
} 

:私は、私は別の質問スレッドで発見され、次のように使用します。問題は、プロシージャの結果をファイルに保存できないようです。

set varName [open file.out a] 
puts $varName [printMatrix $myMatrix] 
close $varName 

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

+0

あなたの手順では、空の文字列がファイルに書き込まれる場合には任意の値を、返却されていないようです。 'puts'文はファイルではなく標準出力にのみ影響します。 –

+0

このプロシージャは、前に定義したリストに含まれるベクトルの値を画面で返します。リストは、 を使用して作成されます。phi_x [lrepeat 36 [lrepeat 12 0.]] "myMatrix"は "phi_x"です。混乱してごめんなさい=( – John

+0

このプロシージャはすべての値を返すコマンドで終了しません。 –

答えて

1

プロシージャから値を返すと、それを印刷し、この

puts $varName [printMatrix $myMatrix] 

ようにしたい場合は、あなたがappend res \nによってappend res ...puts -nonewline ...呼び出し、およびputs ""呼び出しを交換する必要があり、そして最後に、手順が完了したら、return $resに電話してください。

ファイルへの出力テキストに手続きをしたい場合は、この

printMatrix $varName $myMatrix 

のようにそれを呼び出すとputs $chan ""puts -nonewline $chan ...puts ""puts -nonewline ...を置き換えるこの

proc printMatrix {chan myMatrix} { 

ようにそれを再定義します。

ドキュメント:appendprocputsreturn

+0

それはうまくいった。ありがとう! – John

+0

@ジョン:この解決策が助けになったら、それを受け入れるために目盛りをクリックしてください。 –

+0

非常に申し訳ありませんが、私はこれをしなければならなかった...私は非常に申し訳ありません=( – John

関連する問題