Автор Тема: Помогите с скриптом  (Прочитано 9033 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« : 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+)/;

или дайте ссылку про эти символы.
« Последнее редактирование: 06 Сентября 2009, 19:38:49 от MorphTM »

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с скриптом
« Ответ #1 : 07 Сентября 2009, 00:15:31 »
perldoc perlvar
perldoc perlop
perldoc perlre

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« Ответ #2 : 07 Сентября 2009, 15:35:11 »
распиши, если не трудно.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с скриптом
« Ответ #3 : 07 Сентября 2009, 15:46:20 »
чего расписать?

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« Ответ #4 : 08 Сентября 2009, 13:06:37 »
что присвается переменным и масиву
@ARGV[0]!=/^\\w+\\.txt/ - ??????
$line=~/^\\s+$/; - ????????
$line=~/^\\s(\\d+)/; - ?????

и если можишь то потом по отдельности каждый символ.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с скриптом
« Ответ #5 : 08 Сентября 2009, 13:55:17 »
ничего, а первое выражение еще и написано с ошибкой (в данном контексте)

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Помогите с скриптом
« Ответ #6 : 08 Сентября 2009, 16:40:31 »
@ARGV[0]!=/^\\w+\\.txt/
первый аргумент масива содержит несколько букв или цифр + .txt

$line=~/^\\s+$/;
переменная от начала и до конца содержит пробел или несколько

$line=~/^\\s(\\d+)/;
переменная от начала содержит пробел и цифры
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« Ответ #7 : 08 Сентября 2009, 20:30:41 »
хм спасибо.
я теперь запутался.
Значит на ПХП написана форма для выбора текстового файла





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 "";
    print "";
    print "Файл выписок:  ";
    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 теперь перенес на хп. но он не работает.
    Файл передается и на этом все заканчивается.

    Можит что-то не так сделал?

    Вобщем подскажите что и как?

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Помогите с скриптом
« Ответ #8 : 14 Сентября 2009, 21:47:36 »
Код на 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";
здесь хотя бы будет понятно что произойдет в случае ошибки открытия.
Ворота в perl - perlmonks.org.ru

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« Ответ #9 : 19 Сентября 2009, 14:16:58 »
C этим понятно. А вот как скрипт выбирает из текста что кому послать???

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Помогите с скриптом
« Ответ #10 : 20 Сентября 2009, 12:18:34 »
Цитировать
MorphTM:
Так я не могу понять каким образом он выбирает.

так
foreach my $line( ){ ..  }еще так
my @megalines=split("уЮЕФ ЛМЙЕОФБ : ",$megaline);

Цитировать
MorphTM:
Да и сам лог файл не открывается и нечего не записывается в него.

С логом тебе уже сказали
Еще можешь почитать тут perldoc -f open

Цитировать
MorphTM:
Раньше был на Linuxe теперь перенес на хп. но он не работает.


так может у тебя перл вообще не стоит?
или модули какие то
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн MorphTM

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с скриптом
« Ответ #11 : 20 Сентября 2009, 20:58:01 »
Ставил Active Perl последнию версию. Думаю там все есть.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Помогите с скриптом
« Ответ #12 : 21 Сентября 2009, 00:35:02 »
use Net::SMTP - это ставится отдельно
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28