更新/写行内容

时间:2016-12-20 02:19:54

标签: tcl

如何更新/写下面的内容;​​

1.第一种情况:我想仅使用第4行的内容格式更新/替换第4行中的新内容:第4行的none;none;C:\data\update\text.txt;onfiles格式

更改索引2变为C:\data\update\new\newtext.txt

2.第二种情况:如何从第3行写入/替换内容直到结束。

foreach line [split $data \n] {
    incr count
    if {$count <= 2} {
        puts $fp $line ;#write old content
    } elseif {$count == 3} { ;#update line 3 only with parameter below
         if {not match/different content} {
             #update/write...
         } else {
             #do not write or skip write (still use old content)
         }
    } else {
        #new content/update...
            #...
            #...
            #...
            #until end what i need
    }
}

4 个答案:

答案 0 :(得分:0)

试试这个:

set data {
data;data;data
data;data;data
data;mydata;data
data;data;data
data;data;data
data;data;data
data;data;data
}

set lines [split [string trim $data] \n]

# replace one field
lset lines 2 [join [lreplace [split [lindex $lines 2] \;] 1 1 HELLO] \;]

# replace three rows
set n 0
for {set i 3} {$i < [llength $lines]} {incr i} {
    incr n
    lset lines $i "test$n;test$n;test$n"
}

# remove one row
set lines [lrange $lines 0 5]

puts [join $lines \n]

在这种情况下,步骤&#34;替换三行&#34;并且&#34;删除一行&#34;也可以这样做:

set lines [lrange $lines 0 2]
set n 0
while {$n < 3} {
    lappend lines "test[incr n];test$n;test$n"
}

这条线有点密集:

lset lines 2 [join [lreplace [split [lindex $lines 2] \;] 1 1 HELLO] \;]

它的工作原理如下:

set line [lindex $lines 2]
set fields [split $line \;]
set fields [lreplace $fields 1 1 HELLO]
set line [join $fields \;]
lset lines 2 $line

文档: < (operator)forincrjoinlappendlindexllengthlrangelreplacelsetputssetsplitstringwhile

答案 1 :(得分:0)

更改前的文本文件内容如下;

data;data;data   ;#line 0 dont change
data;data;data   ;#line 1 dont change
data;mydata;data   ;#line 2 {$count == 3} line 3 only with parameters
data;data;data   ;#line 3
data;data;data   ;#line 4
data;data;data   ;#line 5
data;data;data   ;#line 6

说明; 第3行:如果{lindex 1!=“data”} {请更改“hello”} 然后继续从第4行写下新内容,直到第6行,如下所示

test1;test1;test1  ;#write line 4 
test2;test2;test2  ;#write line 5
test3;test3;test3  ;#write line 6

输出:

data;data;data
data;data;data
data;HELLO;data
test1;test1;test1
test2;test2;test2
test3;test3;test3

答案 2 :(得分:0)

试试这个:

set input {data;data;data
data;data;data
data;mydata;data
data;data;data
data;data;data
data;data;data
data;data;data}

puts Input
puts [string repeat - 40]
puts $input
puts [string repeat - 40]
set lines [split $input \n]
set lineToChange [lindex $lines 2]
set updatedLine [join [lreplace [split $lineToChange ";"] 1 1 HELLO] ";"]
set output [join [lreplace $lines 2 2 $updatedLine] \n]
puts Output
puts [string repeat - 40]
puts $output

执行结果:

Input
----------------------------------------
data;data;data
data;data;data
data;mydata;data
data;data;data
data;data;data
data;data;data
data;data;data
----------------------------------------
Output
----------------------------------------
data;data;data
data;data;data
data;HELLO;data
data;data;data
data;data;data
data;data;data
data;data;data
----------------------------------------

答案 3 :(得分:0)

我的意思是如下;

------------------------------------------------------------
Input:
data;data;data
data;data;data
data;HELLO;data
datates;testdata;datayes ;#remove and update below output
datago;datadata;datano   ;#remove and update below output
aadata;aaadata;raaadata  ;#remove and update below output
------------------------------------------------------------
Output:
data;data;data
data;data;data
data;HELLO;data
test1;bla;blea
test;blablalbla;bla
blabla;bla;blaagain
------------------------------------------------------------