|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 07 Feb 2004 16:50:18 To : Nikolay Pichtin Subject : Re: Проще сделать -------------------------------------------------------------------------------- Nikolay Pichtin -> All @ Fri, 06 Feb 2004 22:18:13 +0300: NP> Есть файл NP> 1|2|3|4 NP> 11|22|33|44 NP> Hадо изменить одно или несколько значений. NP> Как проще сделать? Как упростить строку с push? perldoc -f join. NP> open (D,"save.dat"); NP> @fil=<D>; NP> close D; NP> foreach (@fil) { NP> @dat=split(/\|/); NP> if ($dat[0] == 11) { NP> $dat[2] = 99; NP> } NP> push (@new,"$dat[0]|$dat[1]|$dat[2]|$dat[3]"); NP> } NP> open (D,">save.dat2"); NP> print D @new; NP> close D; А вообще я бы сделал несколько иначе: open(I, "save.dat"); open(O, ">save.dat2"); while (<I>) { my @dat = split /\|/; $dat[2] = 99 if $dat[2] == 11; print O join('|',@dat),"\n"; } close O; close I; Hу, понятно, что в данном конкретном случае можно было бы @dat вообще не создавать, вполне хватило бы регекса. Строго говоря, регекса хватило бы в любом случае при фиксированном числе полей - на то там и /e, но при более сложной обработке он бы выглядел дюже страшно и чревато ошибками. Еще можно было бы подкрутить ту переменную, которая output field separator, но я предпочитаю явные join хитро спрятанным переназначениям глобальных магических переменных - оно безопаснее. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/114771ddd3a5a.html, оценка из 5, голосов 10
|