Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Проще сделать   Nikolay Pichtin   06 Feb 2004 23:18:13 
 Проще сделать   Ilya Gavrilov   07 Feb 2004 13:42:14 
 Re: Проще сделать   Artem Chuprina   07 Feb 2004 16:50:18 
Архивное /ru.perl/114771ddd3a5a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional