我想在Textdocument中写一行,但是我的代码有问题,我不知道错误在哪里。

set fp [open C:/Users/user/Desktop/tst/settings.txt w]
set count 0
while {[gets $fp line]!=-1} {
    incr count
    if {$count==28} {
            break
    }
}
puts $fp "TEST"
close $fp

该文件仅包含TEST。
有人知道吗?

最佳答案

您正在使用“w”作为访问参数,它会截断文件。因此,您在打开文件时会丢失文件中的所有数据。阅读有关open命令的更多信息

您可以使用“r +”或“a +”。

另外,要在特定行之后写入,您可以将指针移动到所需位置。

set fp [open C:/Users/user/Desktop/tst/settings.txt r+]
set count 0

while {[gets $fp line]!=-1} {
    incr count
    if {$count==28} {
            break
    }
    set offset [tell $fp]
}
seek $fp $offset
puts $fp "TEST"
close $fp

要替换一条完整的生产线,可以通过以下方式更轻松地完成。重写所有行并将新数据写入所需的行。
set fp [open C:/Users/user/Desktop/tst/settings.txt r+]
set count 0
set data [read $fp]
seek $fp 0
foreach line [split $data \n] {
    incr count
    if {$count==28} {
        puts $fp "TEST"
    } else {
        puts $fp $line
    }
}
close $fp

关于tcl - Tcl/Tk写在特定行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37805957/

10-09 05:32