Perl - пакетный файл - PullRequest
       0

Perl - пакетный файл

0 голосов
/ 15 ноября 2018

У меня есть скрипт Perl, который разделяет файл журнала и отправляет запрос в базу данных, и я хочу выполнить этот скрипт Perl из файла bat в планировщике задач Windows. Это выполняет только первый запрос, и я хочу выполнить все запросы.

Мой logfile.txt:

Wed Oct 17 04:57:08 2018 : Resource = 'toto' cstep= 'fifi' time =23.634s 
Wed Oct 17 04:57:50 2018 : Resource = 'titi' cstep= 'fofo' time =22.355s 

Мой Perl скрипт

use DBI; use Sys::Hostname ();

$hostname = Sys::Hostname::hostname();
$hostname_cstep_table = $hostname . '_cstep_table';

# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=DB;host=IP", "nameDB", 'psswordDB', {'RaiseError' => 1});

#on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique
my $sth = $dbh->prepare("SHOW TABLES LIKE '$hostname_cstep_table';")
  or die "prepare statement failed: $dbh->errstr()";

$sth->execute() or die "execution failed: $dbh->errstr()";

#affiche 0 ou 1, selon la table qui est trouvé
$row = $sth->rows;

if ($row eq 1) {

    print $hostname_cstep_table . " has created";

}

if ($row eq 0) {
    #on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique avec une clé primaire et un ID incrémenté
    my $sth = $dbh->prepare(" CREATE TABLE `$hostname_cstep_table` (    `ID` TINYINT ( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT ,   `time` datetime NOT NULL,   `cstep` nvarchar(100)NOT NULL,  `time_in_seconde` int NOT NULL,     PRIMARY KEY (`ID`),     UNIQUE KEY (`time`)     ) ENGINE=Aria;")

        or die "prepare statement failed: $dbh->errstr()"; 
    $sth->execute() or die "execution failed: $dbh->errstr()";
    open (FILE, 'logfile');

    while (<FILE>) {

        ($word1, $word2, $word3, $word4, $word5, $word6, $word7, $word8, $word9, $word10, $word11, $word12, $word13, $word14) = split(" ");

        $word13 =~ s/[^\d.]//g;

        if ($word13 > 5) {

            if ($word2 eq "Jan") {

                $word2 = "01"
            }

            if ($word2 eq "Feb") {

                $word2 = "02"
            }

            if ($word2 eq "Mar") {

                $word2 = "03"
            }

            if ($word2 eq "Apr") {

                $word2 = "04"
            }

            if ($word2 eq "May") {

                $word2 = "05"
            }

            print "'$word5-$word2-$word3 $word4', $word11, $word13 \n";

            # Connect to the database.
            my $dbh = DBI->connect("DBI:mysql:database=DB;host=IP",             "nameDB", 'passwordDB',
            {'RaiseError' => 1}) ;

            #on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique
            my $sth = $dbh->prepare("REPLACE `$hostname_cstep_table` (time, cstep, time_in_seconde) VALUES('$word5-$word2-$word3 $word4', $word11, $word13);")
                or die "prepare statement failed: $dbh->errstr()";
            $sth->execute() or die "execution failed: $dbh->errstr()";
            print $sth->rows . " rows found.\n";
            $sth->finish;

        }
    }    
}

Мой командный файл

C:\Users\Desktop\perl_32_bits\portableshell.bat 
C:\Users\Desktop\perl_32_bits\test3.pl %*

Спасибо за ваш ответ.

1 Ответ

0 голосов
/ 15 ноября 2018

Ваш вопрос действительно не очень ясен, но я думаю, что (еще раз) вы спутали себя с логикой в ​​вашей программе.Преобразованная в псевдокод, ваша программа выглядит следующим образом:

connect to the database
check for the existence of the table
if the table exists
  say that the table exists
else
  create the table
  open the log file
  for each record in the log file
    parse the record
    insert record into the table
  end for
end if

Итак, давайте посмотрим, как это работает.

При первом запуске программы я предполагаю, что таблица несуществовать.Итак, таблица создана, файл журнала обработан и в вашу таблицу добавлено несколько записей.

При каждом последующем запуске программы таблица уже существует.Итак, ваша программа просто сообщает вам, что таблица существует, а затем завершает свою работу без обработки файла журнала.

Я думаю, что вы действительно хотите, чтобы ваша программа выглядела так:

connect to the database
check for the existence of the table
if the table exists
  say that the table exists
else
  create the table
end if

open the log file
for each record in the log file
  parse the record
  insert record into the table
end for

Я уйдуэто просто упражнение для вас, чтобы действительно внести эти изменения в ваш код.

Обновление: И, пожалуйста, рассмотрите возможность использования некоторых из полезных советов, которые вы получили в прошлый раз, когда вы показывали нам этокод .Мы делаем эти предложения по уважительным причинам: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...