首页 > 解决方案 > 从 TCL 中的文本文件中获取单列矩阵

问题描述

我是 TCL 语言的新手,想知道如何执行以下过程。假设我有一个程序每次运行都会创建一个文本文件,并且应该运行 10000 次。每次运行都会创建一个名为“OUT.out”的文本文件。我感兴趣的只是一次运行中该 OUT.out 文件中特定列中的单个数字。

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

我认为代码应该缩短我的笔记。在此先感谢您的帮助。

标签: tcl

解决方案


根据分隔符是什么,您可以执行以下操作:

# 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 以及各种可分析的元数据块。)


推荐阅读