|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/3599ab351b53.html, оценка из 5, голосов 10
|