Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите подправить скрипт. Perl выборка 
:(
    Опции темы
tedy1
Дата 29.11.2011, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



Подскажите:

есть файл в нем такая информация:

Name=d1232
Name=s3452
Name=f3453
19.11.2011 Printer
Name=h7692
Name=g2355
19.11.2011 HDD
Name=a1356

Нужно получить (если после названия стоит дата):
Name=f3453
19.11.2011 Printer
Name=g2355
19.11.2011 HDD
 


Код

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;

$year +=1900;

my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );


my $mon = $mon + 1;


my $mmday = $mday-9;


    $rep="$mmday.$monn.$year"; #Тут выдаётся 19.11.2011


#

my %ddd = ();

#######
Тут большой кусок программы.

#######

while (@Res = each %ddd)
             {

# Если сделать print "$Res[0]"; #тут выводится содержимое всего файла.



    if ($Res[0]=~m|^Name.*\n$repp.*|i) # Тут хочу выбрать если после названия стоит дата то:
#Нужно получить:
#Name=f3453
#19.11.2011 Printer
#Name=g2355
#19.11.2011 HDD
 
{

print "$Res[0]"; #вывод пустой.

}





}
PM MAIL   Вверх
dixoNICH
Дата 29.11.2011, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Код

use strict;
sub search() {
   my ($filename, $date) = @_;
   local $/ = \0;
   open f, $filename or die "$!";
   my $file = <f>;
   my @arr;
   push @arr, $1 while($file=~/(name=\w\d{4}\n$date\s\w+)\n/ig);
   return @arr;
}
C:\Users\yaroslav>perl 2.pl
Name=f3453
19.11.2011 PrinterName=g2355
19.11.2011 HDD


Это сообщение отредактировал(а) dixoNICH - 29.11.2011, 07:56
PM MAIL   Вверх
tedy1
Дата 29.11.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



dixoNICH


Что то у меня не получилось, подскажите где не так (сразу не ругайте, не силён в Perl)?


Код

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;

$year +=1900;

my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );


my $mon = $mon + 1;


my $mmday = $mday-9;


    $date="$mmday.$monn.$year"; #Тут выдаётся 19.11.2011


#

      $file_name="/5/test"; #название файла
#    open(FV, $file_name);
#    read(FV, $buff);
#    close(FV);


use strict;
sub search() {
   my ($file_name, $date) = @_;
   local $/ = \0;
   open f, $file_name or die "$!";
   my $file = <f>;
   my @arr;
   push @arr, $1 while($file=~/(name=\w\d{4}\n$date\s\w+)\n/ig);
   return @arr;
}






Это сообщение отредактировал(а) tedy1 - 29.11.2011, 14:30
PM MAIL   Вверх
arto
Дата 29.11.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# perl -lne 'if (m#^\d\d\.\d\d\.\d\d\d\d\s+\w+#) { print "$a\n$_"; next; } $a = $_' file
Name=f3453
19.11.2011 Printer
Name=g2355
19.11.2011 HDD
#
PM MAIL ICQ   Вверх
dixoNICH
Дата 29.11.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



ладно. во-первых, уберите тогда уж use strict;
во-вторых : вы не вызывайте функцию.
эта функция принимает параметры : имя файла и дату, вызов производится так &search("1.txt", "19.11.2011") (например)

PM MAIL   Вверх
tedy1
Дата 1.12.2011, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



Цитата(dixoNICH @ 29.11.2011,  16:14)
ладно. во-первых, уберите тогда уж use strict;
во-вторых : вы не вызывайте функцию.
эта функция принимает параметры : имя файла и дату, вызов производится так &search("1.txt", "19.11.2011") (например)


Код


      $date="19.11.2011";

      $file_name="/5/test"; #название файла

   &search("$file_name", "$date");
   local $/ = \0;
   open f, $file_name or die "$!";
   $file = <f>;
   @arr;
   push @arr, $1 while($file=~/(name=\w\d{4}\n$date\s\w+)\n/ig);
   return @arr;
}


Где не правильно?

Это сообщение отредактировал(а) tedy1 - 1.12.2011, 06:14
PM MAIL   Вверх
dixoNICH
Дата 1.12.2011, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



что это?
))
search() {
    my( $file, $date) =@_;
    .....
    .....
    return @arr;
}
$date = '19.11.2011';
$file_name = '1.txt';
&search($file_name, $date);
PM MAIL   Вверх
tedy1
Дата 1.12.2011, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



Правильно?
Код


sub search() {
    ($file, $date) =@_;

    local $/ = \0;
    open f, $file_name or die "$!";
    $file = <f>;
    @arr;
    push @arr, $1 while($file=~/(name=\w\d{4}\n$date\s\w+)\n/ig);
    return @arr;
    }

 $file_name = "/5/test";
 $date = "19.11.2011";
&search($file_name, $date);




Это сообщение отредактировал(а) tedy1 - 1.12.2011, 07:14
PM MAIL   Вверх
dixoNICH
Дата 1.12.2011, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



da
PM MAIL   Вверх
tedy1
Дата 2.12.2011, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



dixoNICH

Извиняюсь, а как получить эти данные:
Name=f3453
19.11.2011 Printer
Name=g2355
19.11.2011 HDD

Пробовал все переменные подставлять в print ""; Ввывод так и не получил. Или надо ещё что то дописывать?

Это сообщение отредактировал(а) tedy1 - 2.12.2011, 07:46
PM MAIL   Вверх
dixoNICH
Дата 2.12.2011, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



print &search($file, $date);
PM MAIL   Вверх
tedy1
Дата 2.12.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2010

Репутация: нет
Всего: нет



print &search($file, $date); # ни чего не выдаёт.

dixoNICH
Код


sub search() {
    ($file, $date) =@_;

    local $/ = \0;
    open f, $file_name or die "$!";
    $file = <f>;
    @arr;
    push @arr, $1 while($file=~/(name=\w\d{4}\n$date\s\w+)\n/ig);
    return @arr;
    }

 $file_name = "/5/test";
 $date = "19.11.2011";
&search($file_name, $date);


print &search($file, $date); # ни чего не выдаёт.





Это сообщение отредактировал(а) tedy1 - 2.12.2011, 12:37
PM MAIL   Вверх
arto
Дата 2.12.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



\n\r?
PM MAIL ICQ   Вверх
dixoNICH
Дата 2.12.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



/(name=\w\d{4}\n\r?$date\s\w+)\n\r?/ig

arto, вы это имеет ввиду?

у меня всё работает и так.
PM MAIL   Вверх
arto
Дата 2.12.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# file /tmp/aa.txt
/tmp/aa.txt: ASCII text
# perl -MData::Dumper -e '$file = do { local $/; open F,$ARGV[0] and <F> }; $date = "19.11.2011"; push @arr, $1 while($file=~m/(name=\w\d{4}\n$date\s\w+)/ig); print Dumper \@arr' /tmp/aa.txt
$VAR1 = [
          'Name=f3453
19.11.2011 Printer',
          'Name=g2355
19.11.2011 HDD'
        ];
# unix2dos /tmp/aa.txt
unix2dos: converting file /tmp/aa.txt to DOS format ...
# file /tmp/aa.txt
/tmp/aa.txt: ASCII text, with CRLF line terminators
# perl -MData::Dumper -e '$file = do { local $/; open F,$ARGV[0] and <F> }; $date = "19.11.2011"; push @arr, $1 while($file=~m/(name=\w\d{4}\n$date\s\w+)/ig); print Dumper \@arr' /tmp/aa.txt
$VAR1 = [];
# perl -MData::Dumper -e '$file = do { local $/; open F,$ARGV[0] and <F> }; $date = "19.11.2011"; push @arr, $1 while($file=~m/(name=\w\d{4}\r?\n$date\s\w+)/ig); print Dumper \@arr' /tmp/aa.txt
$VAR1 = [
          'Name=f3453
19.11.2011 Printer',
          'Name=g2355
19.11.2011 HDD'
        ];
#
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.