Forum Webscript.Ru
Программирование => Perl => Тема начата: MorphTM от 06 Сентября 2009, 19:23:33
-
что обзначает вот эта часть скрипта
if(! defined @ARGV || @ARGV[0]!=/^\\w+\\.txt/){die "Usage checks.pl [filename.txt]\\n";}
меня интересует то что выделенно.
foreach my $line(){
chomp($line);
next if ($line=~/^\\s+$/);
my $cc = $conv->convert($line);
$megaline.=$cc."\\n";
}
и
эта переменная
$line=~/^\\s(\\d+)/;
или дайте ссылку про эти символы.
-
perldoc perlvar
perldoc perlop
perldoc perlre
-
распиши, если не трудно.
-
чего расписать?
-
что присвается переменным и масиву
@ARGV[0]!=/^\\w+\\.txt/ - ??????
$line=~/^\\s+$/; - ????????
$line=~/^\\s(\\d+)/; - ?????
и если можишь то потом по отдельности каждый символ.
-
ничего, а первое выражение еще и написано с ошибкой (в данном контексте)
-
@ARGV[0]!=/^\\w+\\.txt/
первый аргумент масива содержит несколько букв или цифр + .txt
$line=~/^\\s+$/;
переменная от начала и до конца содержит пробел или несколько
$line=~/^\\s(\\d+)/;
переменная от начала содержит пробел и цифры
-
хм спасибо.
я теперь запутался.
Значит на ПХП написана форма для выбора текстового файла
Cистема автоматизации отправки
if(isset($_FILES["vipis"]["name"]) && !empty($_FILES["vipis"]["name"])){
print_r($_FILES);
$uploadfile="D:\\server\\web\\site\\1\\checks\\yo.txt";
# print_r($_FILES);
if (move_uploaded_file($_FILES[\'vipis\'][\'tmp_name\'], $uploadfile)) {
echo "- Файл в успешно загружен.
";
if(! system("D:\\server\\web\\site\\1\\checks\\checks.pl D:\\server\\web\\site\\1\\checks\\yo.txt")){
echo " - Файлы успешно сформитрованы
Назад";
}
else{echo " - Ошибка формирования ";}
}
else {
echo "Ошибка загрузки файла
"; }
exit;
}
else{
print "
она передает его скрипту для рассылки по электроным адресам. каждому свой кусок с этого файла.
!D:/server/APACHE/perl/bin/Perl.exe -w
use strict;
if(! defined @ARGV || @ARGV[0]!=/^\\w+\\.txt/){die "Usage checks.pl [filename.txt]\\n";}
##Logging
open (LOG,">>D:/server/APACHE/web/site/cgi/checks/checks.log");
my $time=localtime();
print File " *********** CKECKS.PL LOGGING FACILITY STARTED**************\\n";
print LOG "$time Opening checks file....\\n";
open(FD,@ARGV[0]) and print LOG("$time Cannot open checks file....@ARGV[0]\\n");
my @linez;
my $megaline;
my $conv = Text::Iconv->new("cp1251", "koi8u");
foreach my $line(){
chomp($line);
next if($line=~/^\\s+$/);
my $cc = $conv->convert($line);
$megaline.=$cc."\\n";
}
my %cities=(
"2650755"=>"gorod1",
"2650655"=>"gorod2",
"2650555"=>"gorod3",
"2650455"=>"gorod4",
"2650355"=>"gorod5",
"2650255"=>"gorod6",
"2650155"=>"gorod7",
"2650055"=>"gorod8",
"2650955"=>"gorod9",
);
my %emails=(
"gorod1"=>"эл.адресс",
"gorod2"=>"эл.адресс",
"gorod3"=>"эл.адресс",
"gorod4"=>"эл.адресс",
"gorod5"=>"эл.адресс",
"gorod6"=>"эл.адресс",
"gorod7"=>"эл.адресс",
"gorod8"=>"эл.адресс",
"gorod9"=>"эл.адресс",
);
my @megalines=split("уЮЕФ ЛМЙЕОФБ : ",$megaline);
$megalines[5]=~/чщрйулб йъ мйгечпзп уюефб ъб (\\d\\d\\.\\d\\d\\.\\d\\d\\d\\d)/;
my $date=$1;
print LOG "$time Writing checks for date $date\\n";
#mkdir("/mnt/disk/vipiski/$date",0777) or print LOG "Cannot create directory...\\n";
my $conv1 = Text::Iconv->new("koi8u", "cp1251");
use Net::SMTP;
while(@megalines){
my $smtp = Net::SMTP->new(\'ip adress servera\');
my $line=shift(@megalines);
$line=~/^\\s(\\d+)/;
my $city=$1;
if(! exists($cities{$city})){next};
my $ucity=uc($cities{$city});
open(PZ,">D:/server/APACHE/web/site/cgi/checks/$date/$cities{$city}.txt");
print PZ "******** $ucity ==> $date *********";
my $cc = $conv1->convert($line);
print PZ "$cc\\n";
close PZ;
$smtp->mail("эл.адресс");
# $smtp->to("эл.адресс");
$smtp->to($emails{$cities{$city}});
$smtp->data();
my $subj=$conv1->convert("чЩРЙУЛЙ ЪБ");
$smtp->datasend("Subject: $subj $date\\n");
$smtp->datasend("\\n");
if($cities{$city} eq "gorod"){
$smtp->datasend("$line\\n");
}
if($cities{$city} eq "gorod"){
$smtp->datasend("$line\\n");
}
if($cities{$city} eq "gorod"){
$smtp->datasend("$line\\n");
}
else{
$smtp->datasend("$cc\\n");
}
$smtp->dataend();
$smtp->quit;
print LOG "$time Successfully sent to $emails{$cities{$city}}\\n";
}
my $time=localtime();
print LOG "$time FINISHED \\n**********************************************************\\n";
#`/sbin/umount /mnt/disk`;
Так я не могу понять каким образом он выбирает.
Да и сам лог файл не открывается и нечего не записывается в него.
Раньше был на Linuxe теперь перенес на хп. но он не работает.
Файл передается и на этом все заканчивается.
Можит что-то не так сделал?
Вобщем подскажите что и как?
-
Код на Perl - ужасен.
##Logging
[B]открываем для логов один дескриптор[/B]
open (LOG,">>D:/server/APACHE/web/site/cgi/checks/checks.log");
my $time=localtime();
[B]а пишем в другой?!?[/B]
print File " *********** CKECKS.PL LOGGING FACILITY STARTED**************\\n";
print LOG "$time Opening checks file....\\n";
open(FD,@ARGV[0]) and print LOG("$time Cannot open checks file....@ARGV[0]\\n");
вообще открывать файлы лучше либо через модуль IO::File, либо уж на худой конец так:
open(FILE,">>","filename.txt") || die "Error :$!\\n";
здесь хотя бы будет понятно что произойдет в случае ошибки открытия.
-
C этим понятно. А вот как скрипт выбирает из текста что кому послать???
-
MorphTM:
Так я не могу понять каким образом он выбирает.
так
foreach my $line( ){ .. }
еще так
my @megalines=split("уЮЕФ ЛМЙЕОФБ : ",$megaline);
MorphTM:
Да и сам лог файл не открывается и нечего не записывается в него.
С логом тебе уже сказали
Еще можешь почитать тут perldoc -f open
MorphTM:
Раньше был на Linuxe теперь перенес на хп. но он не работает.
так может у тебя перл вообще не стоит?
или модули какие то
-
Ставил Active Perl последнию версию. Думаю там все есть.
-
use Net::SMTP - это ставится отдельно