作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 time.dat 和 acc.dat 的文件,它们都包含一个包含数值的列。我想从这些文件中创建包含文件中值的列表。有谁知道该怎么做?
proc ReadRecord {inFilename outFilenameT outFilenameS} {
if [catch {open $inFilename r} inFileID] {
puts stderr "Cannot open $inFilename for reading"
} else {
set outFileIDS [open $outFilenameS w]
set outFileIDT [open $outFilenameT w]
foreach line [split [read $inFileID] \n] {
if {[llength $line] == 0} {
continue
} else {
puts $outFileIDT [lindex $line 0]
puts $outFileIDS [lindex $line 1]
}
}
close $outFileIDT
close $outFileIDS
close $inFileID
}
};
最佳答案
这样的事情应该可以解决问题:
proc listFromFile {filename} {
set f [open $filename r]
set data [split [string trim [read $f]]]
close $f
return $data
}
set times [listFromFile time.dat]
set accs [listFromFile acc.dat]
[split]
命令在这里为您做“繁重的工作”。
编辑
如果您有一个包含两列的文件,并且您想从函数中返回该数据集,那么您有几个选择。两者都涉及返回“列表列表”,然后只是您想要两个 N 元素列表还是 N 两个元素列表的问题。例如,要获取两个元素的 N 个列表:
proc readData {filename} {
set result {}
set f [open $filename r]
foreach line [split [read $f] \n] {
lappend result $line
}
return $result
}
或者,获取两个 N 个元素的列表:
proc readData {filename} {
set times {}
set accs {}
set f [open $filename r]
foreach line [split [read $f] \n] {
lappend times [lindex $line 0]
lappend accs [lindex $line 1]
}
return [list $times $accs]
}
从技术上讲,您甚至可以将数据作为 2N 个元素的列表返回:
proc readData {filename} {
set result {}
set f [open $filename r]
foreach line [split [read $f] \n] {
lappend result [lindex $line 0] [lindex $line 1]
}
return $result
}
这完全取决于您计划如何使用这些数据。
关于file - 如何将文件转换为 tcl 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219420/
我是一名优秀的程序员,十分优秀!