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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexei Borissov                      2:5020/400     20 Nov 2002  16:30:34
 To : Sergey Juchkov
 Subject : Re: regexp
 -------------------------------------------------------------------------------- 
 
 Привет, Sergey!
 SJ>   pаз уж начал тему - не получается. pасшиpю вопpос - есть файл вида:
 
 <snip>
 
 SJ> есть кусок кода:
 
 <snip>
 
 SJ>   идея такова -
 SJ>  - то что начинается с пеpвой позиции и с "/" - пpеобpазовать в URL
 SJ> (вывести). если стpока оканчивается   файлом - вывести последий каталог +
 SJ> файл, если каталогом - вывести только каталог. - то что
 SJ> "============================..."   - если пеpвая вывести <br>  иначе ничего
 SJ>  - то что начинается с пеpвой позиции и с "-" - если пеpд ним был комент.
 SJ> (ниже) вывести <br>
 SJ>  - то что начинается не с пеpвой позиции - считать коментаpием и вывести
 SJ> пpосто текстом
 
 SJ> помогите плиз. что-то не втыкаю.
 
 Твой скрипт, data.txt и условия немного не согласуются между собой,
 поэтому в процессе правки пришлось немного додумывать. Вот что получилось:
 
 > - начало -
 
 use strict;
 
 my $bb1=0;
 my $bb2=0;
 open FILE, "data.txt" or die;
 while( chomp( my $str = <FILE> ) ) {
     if ( $str =~ m#(\d\d)\.(\d\d)\.(\d{4})# ) {
         print "<span class='dat2'>[$1.$2.$3]</span>\n";
         next;
     }
     if ( $str =~ m#^/# ) {
         print "<a href='ftp://10.1.2.1:2121$str'>";
         if ( $str =~ m#([^/]+)/$# ) {
             print $1;
         }
         else {
             my( $last_dir, $file_name) = ( $str =~ m#/([^/]+)/([^/]+)$# );
             print "$last_dir\n$file_name";
         }
         print "</a>\n";
         next;
     }
     if ( $str =~ m#^=+$# ) {
         print "<br>\n";
         print "<br>\n" if $bb1^=1;
         next;
     }
     if ( $str =~ m#^-$# ) {
         print "<br>\n";
         if ( $bb2 ) {
             print "<br>\n";
             $bb2 = 0;
         }
         next;
     }
     print "<br>\n<span class='txt'>$str</span>\n";
     $bb2++;
 }
 
 > - конец -
 А если немного переформулировать условия:
 
 1. если /^(\d\d)\.(\d\d)\.(\d{4})/, то вывести дату
 2. если в первый символ "/", то как у тебя
 4. /^(-|=+)$/ заменить на <br>
 3. всё остальное является комментарием и выводится как есть
 
 то скрипт получается несколько проще и понятнее, а результат тот же.
 
 > - начало -
 
 use strict;
 
 open FILE, "data.txt" or die;
 while( chomp( my $str = <FILE> ) ) {
     if ( $str =~ m#^(\d\d)\.(\d\d)\.(\d{4})# ) {
         print "<span class='dat2'>[$1.$2.$3]</span>\n";
         next;
     }
     if ( $str =~ m#^/# ) {
         print "<a href='ftp://10.1.2.1:2121$str'>";
         if ( $str =~ m#([^/]+)/$# ) {
             print $1;
         }
         else {
             my( $last_dir, $file_name) = ( $str =~ m#/([^/]+)/([^/]+)$# );
             print "$last_dir\n$file_name";
         }
         print "</a>\n";
         next;
     }
     if ( $str =~ m#^(-|=+)$# ) {
         print "<br>\n";
         next;
     }
     while ( $str !~ m#^(-|=+)$# ) {
         print "<br>\n<span class='txt'>$str</span>\n";
         chomp( $str = <FILE> );
     }
     print "<br><br>\n";
 }
 
 > - конец -
 -- 
 Best regards,
  Alexei                            mailto:albor{at}pisem.net
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 regexp   Sergey Juchkov   19 Nov 2002 20:06:02 
 Re: regexp   Alexei Borissov   20 Nov 2002 16:30:34 
 regexp   Sergey Juchkov   21 Nov 2002 00:58:23 
Архивное /ru.perl/3599ab351b53.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional