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

标签 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
   }
};

最佳答案

这样的事情应该可以解决问题:

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/

相关文章:

c# - 如何将目录和文件从一个外部复制到另一个 C# 控制台

Java将键/值字符串列表转换为Map

python - 我需要在 python 中运行 TCL 脚本,我的 TCL 脚本还有一个用户定义的(内部)包

sqlite - 在不存在文件名 fileName 的情况下调用 sqlite3 fileName 时,如何避免 sqlite3 创建新的空数据库?

tcl - 命名空间合奏创建-map : Get the old name in my procedure when I call it

linux - 使用 awk 从文件中提取信息并使用 bash 将其存储到变量中

javascript - 如何使用 javascript 读取 epub 中的文件内容

python - 如何将二进制文件数据读入数组?

python - 有效地将列表合并到稀疏列表中

python - 为什么列表和元组会改变枚举的输出?