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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Sergey Gernichenko                   2:5079/32.34   11 Nov 2001  17:58:02
 To : All
 Subject : Что можно записать "поперловее"?
 -------------------------------------------------------------------------------- 
 
 Вот этот скрипт целиком. Всё в нём работает. Сабж.
 
 === begin ptsgen.pl ===
 #!perl
 
 #первый аргумент - путь к points.cfg
 #второй аргумент - путь к поинтсегменту
 #третий аргумент - путь к лог-файлу.
 use POSIX qw(strftime);
 @def=("Point","","Unknown","Surgut","","-Unpublished-","9600","MO\n");
 open points,"<$ARGV[0]" || die "Файл не открывается";
 /^\s*(\d+)\s+4[dD]\s+([^;]+?)\s*($|;)/ && $1>0 && ($p{$1}=$2)=~ s/ +/_/g while
 (<points>);
 
 close points;
 open pts,"<$ARGV[1]" || die "Файл $! не открывается";
 open out,">tmp" || die "Файл $! не открывается";
 
 $total=scalar (@sd=sort {$a <=> $b} keys %p);
 while (<pts>)
 {
   @q=split (",",$_);
   #print "'$_'\n";
   if (/^Point/)
   {
     if (!defined $p{$q[1]})  #Если поинт удалён, то удалить и строчку
     {
       push @deleted,$_;
       next;
     };
 
     while (($minp=shift @sd) < $q[1])
     #Если поинт(ы) добавились (в начале или середине сегмента)
     {
       $def[1]=$minp;
       $def[4]=$p{$minp};
       print out join (",", @def);
       push @added,join (",", @def);
     }
 
     if ($p{$q[1]} ne $q[4])       #Если поинт изменился
     {
       $def[1]=$q[1];
       $def[4]=$p{$q[1]};
       push @changed,(";".join (",", @q).join (",", @def));
       @q=@def;
 
     }
   }
   print out join (",", @q);
 }
 close pts;
 while ($minp=shift @sd)  #Если поинт(ы) добавились (в конце сегмента)
 {
   $def[1]=$minp;
   $def[4]=$p{$minp};
   print out join (",", @def);
   push @added,join (",", @def);
 }
 close out;
 unlink $ARGV[1];
 rename "tmp", $ARGV[1];
 
 open fl,">>$ARGV[2]" || die "Файл $! не открывается";
 print fl "\n\n".(strftime "%m.%d.%Y %H:%M:%S", localtime)."\n";
 print fl "Добавлено поинтов: ".(scalar @added)."\n".join ("",@added);
 print fl "Изменено поинтов: ".(scalar @changed)."\n".join ("",@changed);
 print fl "Удалено поинтов: ".(scalar @deleted)."\n".join ("",@deleted);
 print fl "Всего поинтов на ноде: $total\n";
 close fl;
 === end ptsgen.pl ===
 Sergey
 
 --- GoldED+/W32 1.1.5-1017
  * Origin: Hет его пока... (2:5079/32.34)
 
 

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

 Тема:    Автор:    Дата:  
 Что можно записать "поперловее"?   Sergey Gernichenko   11 Nov 2001 17:58:02 
 Что можно записать "поперловее"?   Dmitry Smolin   12 Nov 2001 03:22:58 
Архивное /ru.perl/33483bee69ae.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional