我有一个名为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
}
};
Run Code Online (Sandbox Code Playgroud)
像这样的东西应该做的伎俩:
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]
Run Code Online (Sandbox Code Playgroud)
这个[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
}
Run Code Online (Sandbox Code Playgroud)
或者,获取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]
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,您甚至可以将数据作为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
}
Run Code Online (Sandbox Code Playgroud)
这一切都取决于您计划如何使用数据.
| 归档时间: |
|
| 查看次数: |
9990 次 |
| 最近记录: |