2016-03-28 24 views
0

TCL dillerini öğrenmeye başladım, bu yüzden soru biraz basit olabilir. Vektörden bir matris oluşturmaya çalışıyorum. Daha önce sorulan soruya bakarak şu fikri buldum:Prosedürü dosyaya kaydet

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

Vektör listemi oluşturmak için. Sonra listenin vektörünü lset komutuyla doldururum. Sonra başka bir soru konuları üzerinde bulunan aşağıdakileri kullanın:

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 "" 
} 

Bu kod düzgün çalışıyor. Sorun şu ki, prosedürün sonucunu

Yardımı ile bir dosyaya kaydedemiyorum.

+0

. 'Puts' ifadeleri sadece dosya değil standart çıktıyı etkiler. –

+0

Prosedür, daha önce tanımlanan listede yer alan vektörün değerlerini ekranda döndürür. Liste kullanılarak oluşturulmuştur phi_x [lrepeat 36 [lrepeat 12 0.]] "myMatrix" "phi_x" ... karışıklık için özür dilerim = ( – John

+0

Prosedür herhangi bir değeri döndüren bir komutla bitmiyor. Prosedürü bir kabukta çalıştırdığınızı ve çıktıyı "koçluk" çağrıları ile gözlemlediğinizi varsayalım. Çıktı, geri dönüş değeriyle aynı değil. –

cevap

1

nihayet, zaman prosedür bir değer döndürmek ve baskı onu, append res \n ederek append res ... ile puts -nonewline ... çağırmaları değiştirmeniz gerekiyor o zaman bu

puts $varName [printMatrix $myMatrix] 

ve puts "" başlatmaları gibi ve isterseniz prosedür tamamlandı, return $res'u arayın. Eğer bir dosyaya çıktı metne prosedürü istiyorsanız

, bu

printMatrix $varName $myMatrix 

gibi diyoruz ve bu

proc printMatrix {chan myMatrix} { 

puts $chan "" ile puts -nonewline $chan ... ve puts "" ile puts -nonewline ... değiştirilmesi gibi yeniden tanımlamak.

Dokümantasyon: append, proc, puts, muracatiniz boş dize dosyaya yazılır ve bu durumda herhangi bir değer, iade görünmüyor return

+0

Bu işe yaradı. Teşekkürler! – John

+0

@John: Bu çözüm size yardımcı olsaydı, kabul etmek için onay işaretini tıklayın. –

+0

Çok üzgünüm, bunu yapmak zorunda olduğumu bilmiyordum ... çok üzgünüm = ( – John