2016-12-20 3 views
0

Как обновлять/писать как belows;Обновление/запись содержимого строк

1.First случай: Я хочу обновить/заменить новое содержание в строке 4 только с форматом контента в строке 4, как это: формат none;none;C:\data\update\text.txt;onfiles в строке 4 индекса изменения

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

Пожалуйста, пройдите через этот: 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), for, incr, join, lappend, lindex, llength, lrange, lreplace, lset, puts, set, split, string, 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 

замечания; Line 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

Я имею в виду, как belows;

------------------------------------------------------------ 
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 
------------------------------------------------------------