从文件中逐行读取*TCL

从文件中逐行读取*TCL,tcl,Tcl,在TCL中,我想逐行读取文件(a.txt) 输入文件: a1 1000.1111 2000.2222 a2 2222.0001 3333.2224 . . 输出文件1: 球a1 输出文件2: 比赛[棒球a1]{1000.1111(-10.5)2000.2222(+20.785)} 游戏(棒球a2){2222.0001(-10.5)3333.2224(+20.785))要逐行读取文件,请在如下循环中使用get: set f [open "input.file"] whi

在TCL中,我想逐行读取文件(a.txt)

输入文件:


a1 1000.1111 2000.2222

a2 2222.0001 3333.2224 . .


输出文件1:

球a1


输出文件2:

比赛[棒球a1]{1000.1111(-10.5)2000.2222(+20.785)}


游戏(棒球a2){2222.0001(-10.5)3333.2224(+20.785))

要逐行读取文件,请在如下循环中使用
get

set f [open "input.file"]
while {[gets $f line] >= 0} {
    # Do something with $line in here
}
close $f
或者使用
read
一次读取所有文件,并浏览
拆分
行:

set f popen "input.file"]
set data [read $f]
close $f

foreach line [split $data "\n"] {
    # Do something with $line in here
}
我不完全理解您实际希望如何处理这些行,因此我将让您编写这一部分。但是,当您无法确定行中的单词是否简单时(您的示例片段非常简单),获取这些单词的最佳方法是:

一旦有了单词列表,就可以执行一系列的列表操作。例如,要将一行分成第一个单词和其他单词,请使用
lassign

set remaining [lassign $words gameName]
format
命令可能有助于生成输出

puts $outputFile [format "game (Baseball %s) {%s}" $gameName $statistics]

但正如我所说,我真的不知道如何制作
统计数据。

下面是一个非常简单的工作示例:

set rfp [open "a.txt" r]
set txt [read $rfp]
close $rfp

set text_lines [split $txt "\n"]

set wfp [open "output.txt" w]

foreach line $text_lines {
    if { $line != {} } {
        set val1 [lindex "$line" 0]
        set val2 [lindex "$line" 1]
        set val3 [lindex "$line" 2]
        puts $wfp "game (Base ball $val1) { $val2 (-10.5) $val3 (+20.785) }"
    }
}

close $wfp
这将产生一个名为
output.txt
的文件,首先从
a.txt
读取输入,其中包含您所需的确切(某种)模糊内容,不管它是什么

将跳过空行,请记住,不会进行进一步的行解析检查,因此这意味着始终需要正确的格式

输出文件1
毫无意义


在需要的地方编辑路径。再见。

您将在
$text_行
的末尾有一个空元素,因为
$txt
以换行结束。您可能希望
设置txt[read-nonewline$rfp]
@glennjackman您所说的是正式正确的,
如果{$line!={}
防止在结尾处出现空元素。由于
单独设置txt[read-nonewline$rfp]
无法避免从源文件中解析空行,因此我认为我们应该两者都有。谢谢。
set rfp [open "a.txt" r]
set txt [read $rfp]
close $rfp

set text_lines [split $txt "\n"]

set wfp [open "output.txt" w]

foreach line $text_lines {
    if { $line != {} } {
        set val1 [lindex "$line" 0]
        set val2 [lindex "$line" 1]
        set val3 [lindex "$line" 2]
        puts $wfp "game (Base ball $val1) { $val2 (-10.5) $val3 (+20.785) }"
    }
}

close $wfp