есть скрипт который читает файл и пишет его в базу
#!/usr/bin/perl -w
use DBI;
use Getopt::Std;
use POSIX qw(strftime);
$DB_NAME = 'XXXXX';
$DB_USER = 'XXXXXX';
$DB_PASS = 'XXXXX';
$DETAIL = 'templog';
open DETAIL, "<$DETAIL";
$dbh = DBI->connect("DBI:Pg:dbname=$DB_NAME", $DB_USER, $DB_PASS);
$sth = $dbh->prepare("insert into logs (msg) values(?) ;");
$|=1;
while (<DETAIL>)
{
chomp;
@lines=split(' ');
$msg = $lines[7];
$sth->execute(
$msg) || die "cannot transfer data";
}
$dbh->disconnect;
не могу задать интервал например [7..15], то есть из массива выделить несколько частей.На входе лог файл с буквами и цифрами.Если делать без базы и файла а просто создать массив цифровой, то все работает если указать [7..15], подскажите что не так делаю.
@newarray=@old_array[7..15];поищи инфу в гугле по срезам массивов вперле
>есть скрипт который читает файл и пишет его в базу
>#!/usr/bin/perl -w
>use DBI;
>use Getopt::Std;
>use POSIX qw(strftime);
>$DB_NAME = 'XXXXX';
>$DB_USER = 'XXXXXX';
>$DB_PASS = 'XXXXX';
>$DETAIL = 'templog';
>open DETAIL, "<$DETAIL";
>$dbh = DBI->connect("DBI:Pg:dbname=$DB_NAME", $DB_USER, $DB_PASS);
>$sth = $dbh->prepare("insert into logs (msg) values(?) ;");
>$|=1;
>while (<DETAIL>)
> {
chomp $_;
@lines=split(/[\s\t]+/,$_);
$msg = $lines[7];
$sth->execute($msg) || die "cannot transfer data";
}
$dbh->disconnect;==== [\s\t]+ будет включать все последовательности пробельных символов и символов табуляций.
напрмер пробел обозначим симолом подчеркивания _ тогда
word_word_word__word
При твоем разбивании разобьет не на четыре слова, а на пять, четвертое будет иметь значение undef
>>есть скрипт который читает файл и пишет его в базу
>>#!/usr/bin/perl -w
>>use DBI;
>>use Getopt::Std;
>>use POSIX qw(strftime);
>>$DB_NAME = 'XXXXX';
>>$DB_USER = 'XXXXXX';
>>$DB_PASS = 'XXXXX';
>>$DETAIL = 'templog';
>>open DETAIL, "<$DETAIL";
>>$dbh = DBI->connect("DBI:Pg:dbname=$DB_NAME", $DB_USER, $DB_PASS);
>>$sth = $dbh->prepare("insert into logs (msg) values(?) ;");
>>$|=1;
>>while (<DETAIL>)
>> {
> chomp $_;
>@lines=split(/[\s\t]+/,$_);
> $msg = $lines[7];
> $sth->execute($msg) || die "cannot transfer data";
> }
>$dbh->disconnect;
>
>==== [\s\t]+ будет включать все последовательности пробельных символов и символов табуляций.
>напрмер пробел обозначим симолом подчеркивания _ тогда
>word_word_word__word
>При твоем разбивании разобьет не на четыре слова, а на пять, четвертое
>будет иметь значение undef
Всем большое спасибо
>==== [\s\t]+ будет включать все последовательности пробельных символов и символов табуляций.
Сори, но ведь \s включает и табуляцию (\r, \t, \n, \f). Зачем отдельно указывать \t?