如何更新/写下面的内容;
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
}
}
答案 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), for, incr, join, lappend, lindex, llength, lrange, lreplace, lset, puts, set, split, string, while
答案 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
------------------------------------------------------------