Xpoint
   [напомнить пароль]

Вытаскиваем данные из строк

Метки: [без меток]
[удл]
2006-12-12 01:48:08 [обр] Andrej[досье]
Есть файл в котором 20 строчек в каждой из них есть теги <big>12/12/2006 12:22:11</big> Подскажите пожалуйста каким образом вытащить число, месяц и год с этих строк?
спустя 2 часа 7 минут [обр] Роман Чемисов(56/327)[досье]

Andrej[досье]

my ($date, $month, $year) = $line =~ m{<big>(\d{2})/(\d{2})/(\d{4})};

P. S. я правда не знаю какие значения у Вам может принимать месяц и день, но, думаю, с этим Вы сами разбирётесь.

спустя 22 часа [обр] Andrej[досье]
Спасибо все получилось.
А вот как быть, мы сейчас можем выяснить в каком день, месяц и год создана строчка. А как их показать рассортированными по дате (по убыванию)?
спустя 2 часа 4 минуты [обр] Роман Чемисов(56/327)[досье]

Andrej[досье]
Занести их в массив. Только строки составлять в таком порядке:

my $date = $year . "-" . "$month . "-" . $day;

и потом сделать sort.

спустя 15 часов [обр] Andrej[досье]
      open (IMEN,"<$directory/h.txt") or die "Can't open file $!\n"; 
            my @imen =<IMEN>;
          for(my $i=0; $i<=$#imen; $i++){
             my ($year, $month, $day) = $imen[$i] =~ m{<big> (\d{2})/(\d{2})/(\d{4})};
             @massiv = "$year-$month-$day";
             @strocki = sort %massiv;
             print "@strocki";
            }  
      close(IMEN) or die "Can't close file $!\n";
Ну вот смотрите.
Дату месяц и год всех строчек мы заносим в @massiv.
С сортировкой так и не удалось толком разобраться. А как ему дать понять что мне нужно не те даты рассортировать. А по тем датам рассортировать строчки в которых те даты находятся?
спустя 1 час 4 минуты [обр] Алексей Севрюков(198/1280)[досье]
сообщение промодерировано
Andrej[досье]
  1. Сперва надо собрать весь массив трансформированных данных, не нужно сортировать в цикле.
  2. Собираете массив @massiv, а сортируете почему то хэш %massiv, которого у Вас вообще нет.
  3. В присвоении перепутали местами день и год.
open (IMEN,"<","$directory/h.txt") or die "Can't open file $!\n"; 
my @arr=();
while(<IMEN>)
 {
  my ($day,$month,$year) = ($_=~ m#<big> (\d{2})/(\d{2})/(\d{4})#);
  push(@arr,"$year-$month-$day");
 }
@arr=sort @arr;
print join ("\n"=>@arr);
close(IMEN) or die "Can't close file $!\n";
спустя 4 часа 41 минуту [обр] Andrej[досье]

Я Вас наверное уже замучал. :)
Сейчас попытался рассортировать 2 текстовых документа.
Вот что у меня получилось:

open (IMEN,"<","$directory/h.txt") or die "Can't open file $!\n";
my @arr1=();
while(<IMEN>) {
  my ($day,$month,$year) = ($_=~ m#<big> (\d{2})/(\d{2})/(\d{4})#);
  push(@arr1,"$year-$month-$day");
 }
close(IMEN) or die "Can't close file $!\n";

open (IMEN,"<","$directory/h2.txt") or die "Can't open file $!\n";
my @arr2=();
while(<IMEN>) {
  my ($day,$month,$year) = ($_=~ m#<big> (\d{2})/(\d{2})/(\d{4})#);
  push(@arr2,"$year-$month-$day");
 }
close(IMEN) or die "Can't close file $!\n";

@arr3 = @arr1 + @arr2;
@arr3 = sort {$b cmp $a} @arr3;
print join ("\n<br>"=>@arr3);

Конструкция отказывается работать, она пишет цифру равную количеству строк этих 2 файлов. Насколько я понял я не правильно плюсую массивы. Расскажите пожалуйста как их нужно плюсовать. И главный вопрос как к этим датам привязать те строчки в которых они находятся. А точнее вместо этих дат показать те строчки.

спустя 3 часа 14 минут [обр] Роман Чемисов(56/327)[досье]

Andrej[досье]

@arr3 = sort (@arr1, @arr2);

Этого должно хватить.

P. S. Как Вы уже поняли, конструкция

@arr3 = @arr1 + @arr2;

равна

@arr3 = scalar(@arr1) + scalar(@arr2);

отсюда берутся и цифры, равные количеству строк в файлах.

спустя 6 часов [обр] Сергей Чернышев(2/589)[досье]
Andrej[досье]
Андрей, мне кажется, что вам бы хорошо почитать какую-нибудь книжку по перлу для начинающих - после этого будет гораздо легче решать ваши задачи.
спустя 3 часа 32 минуты [обр] Алексей Севрюков(198/1280)[досье]

Andrej[досье]

my @arr=();
foreach my $fname(qw(h h2))
 {
  open (IMEN,"<","$directory/${fname}.txt") or die "Can't open file $!\n";

  while(<IMEN>) 
   {
    my ($day,$month,$year) = ($_=~ m#<big> (\d{2})/(\d{2})/(\d{4})#);
    push(@arr,"$year-$month-$day");
   }

  close(IMEN) or die "Can't close file $!\n";
}

@arr=sort {$b cmp $a} @arr;
print join ("\n<br>"=>@arr);

P.S. Настоятельно рекоменду прислушаться к Сергею Чернышеву[досье]. Очень много вопросов задаете, а понимание предмета все никак не приходит. Это же совсем основы, такие вещи должен знать каждый.

Powered by POEM™ Engine Copyright © 2002-2005