如何将文件转换为tcl列表?

use*_*224 3 file list tcl

我有一个名为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)

Eri*_*ski 6

像这样的东西应该做的伎俩:

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)

这一切都取决于您计划如何使用数据.