从 TCL 中的文本文件中获取矩阵的单列

Get a single column of matrix from a text file in TCL

我是TCL语言新手,想知道如何进行下面的流程。假设我有一个程序,每个 运行 创建一个文本文件,并且应该 运行 10000 次。每个 运行 都会创建一个名为“OUT.out” 的文本文件。我感兴趣的是单个 运行.

中那个 OUT.out 文件的特定列中的单个数字

单个 运行 的理想情况应如下所示:

我认为代码应该比我的笔记短。预先感谢您的帮助。

根据分隔符的不同,您可以这样做:

# Read in the data and list-ify it; REAL data is often messier though
set f [open OUT.out]
set table [lmap row [split [read $f] "\n"] {split $row}]
close $f

# Kill that unwanted file
file delete OUT.out

# Tcl indexes start at 0
set col4abs [lmap row $table {
    expr { abs([lindex $row 3]) }
}]

# Get the maximum of a list of values
set maxAbs [tcl::mathfunc::max {*}$col4abs]

# You don't say what file to accumulate maximums in
set f [open accumulate.out "a"];  # IMPORTANT: a == append mode
puts $f $maxAbs
close $f

然后在每个 运行 之后重复。我相信你能弄清楚如何做到这一点。

但是如果您经常这样做,您可能应该考虑将结果存储在数据库中;它们 比一堆普通文件更适合这种事情。 (我完全可以推荐 SQLite;我们将批量结果数据管理移入其中,极大地提高了我们管理事物的能力,这保留了许多相当大的二进制 blob 以及各种可分析的元数据块。)