2016-12-20 76 views
0

如何更新/写入如下;更新/写入行内容

1.首先案例:我想更新/只与内容格式在4号线这样的替换4号线新内容:第4行

变化指数2 none;none;C:\data\update\text.txt;onfiles格式成为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 
    } 
} 
+0

请通过这个:http://stackoverflow.com/help/how-to-ask –

回答

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] 

在这种情况下,步骤 “取代三行” 和 “删除行” 也可以做到这样:

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)forincrjoinlappendlindexllengthlrangelreplacelsetputssetsplitstring,变化如下之前 while

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 = “数据”} {请更换 “你好”} 然后继续写从第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 
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 
---------------------------------------- 
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 
------------------------------------------------------------