in tcl, how do I replace a line in a file?

前端 未结 5 1320
执念已碎
执念已碎 2021-01-01 03:55

let\'s say I opened a file, then parsed it into lines. Then I use a loop:

foreach line $lines {}

inside the loop, for some lines, I want to

5条回答
  •  执笔经年
    2021-01-01 04:50

    for plain text files, it's safest to move the original file to a "backup" name then rewrite it using the original filename:

    Update: edited based on Donal's feedback

    set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
    
    set filename "filename.txt"
    set temp     $filename.new.$timestamp
    set backup   $filename.bak.$timestamp
    
    set in  [open $filename r]
    set out [open $temp     w]
    
    # line-by-line, read the original file
    while {[gets $in line] != -1} {
        #transform $line somehow
        set line [string tolower $line]
    
        # then write the transformed line
        puts $out $line
    }
    
    close $in
    close $out
    
    # move the new data to the proper filename
    file link -hard $filename $backup
    file rename -force $temp $filename 
    

提交回复
热议问题