【问题标题】:Save procedure to file将程序保存到文件
【发布时间】:2016-03-28 17:34:30
【问题描述】:

我开始学习 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

感谢您的帮助!

【问题讨论】:

  • 您的过程似乎没有返回任何值,在这种情况下,空字符串将被写入文件。 puts 语句只会影响标准输出,不会影响文件。
  • 该过程在屏幕上返回先前定义的列表中包含的向量的值。该列表是使用 set phi_x [lrepeat 36 [lrepeat 12 0.]] "myMatrix" is "phi_x"... 抱歉混淆 =(
  • 该过程不会以返回任何值的命令结束。我假设您正在 shell 中运行该过程并观察 puts 调用的输出。输出与返回值不同。
  • 我按照您的评论编辑了如下程序: proc printMatrix {phi_x} { set fox [open Modx.out a] set height [llength [lindex $phi_x]] set width [llength [lindex $phi_x 0]] for {set j 0} {$j
  • 你仍然有一些问题,包括仍然将换行符输出到stdout而不是$fox

标签: list vector save tcl puts


【解决方案1】:

如果你想从过程中返回一个值并打印出来,像这样

puts $varName [printMatrix $myMatrix]

然后您需要将puts -nonewline ... 调用替换为append res ...,将puts "" 调用替换为append res \n,最后,当程序完成后,调用return $res

如果您希望该过程将文本输出到文件,请像这样调用它

printMatrix $varName $myMatrix

然后像这样重新定义它

proc printMatrix {chan myMatrix} {

puts -nonewline ... 替换为puts -nonewline $chan ...,将puts "" 替换为puts $chan ""

文档:appendprocputsreturn

【讨论】:

  • 非常抱歉,我不知道我必须这样做...非常抱歉 =(
  • @John:你没有必须去做,接受与否是你的选择。但是接受答案 1) 证明它是有用的,这对于寻找相同问题的答案的其他人来说很有趣,2) 从开放问题列表中删除该问题,以及 3) 给我 15 个代表;)
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多