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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция sort. 
:(
    Опции темы
Suppir
Дата 31.10.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сортировка с помощью регулярных выражений:


Код

while(<DATA>){
    push(@lines, $_)
};


@sorted = sort {smart_sort()} @lines;

map {print} @sorted;
<>;



sub smart_sort{
    $a =~ / (\d\d).(\d\d).(\d\d\d\d) /;
    $date1 = $3.$2.$1;

    $b =~ / (\d\d).(\d\d).(\d\d\d\d) /;
    $date2 = $3.$2.$1;

    $date2 <=> $date1
}




__DATA__
sdasdas 10.04.2008 dadsds
sdasdas 01.02.2009 dadsds
sdasdas 31.12.2011 dadsds
sdasdas 15.05.2006 dadsds

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


Бывалый
*


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

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



Код

use Exporter;
@ISA = qw(Exporter); 
@EXPORT_OK = qw(PROCESSOR); 
use DateTime::Format::Epoch;
sub islyear
{
  my $year = shift;

  $year = $year / 100 unless $year % 100;
  return !($year % 4);
}
sub getnday
{
  my $day = substr($_[0], 0, 2);
  my $month = substr($_[0], 3, 2);
  my $year = substr($_[0], 6, 4);
  $day =~ s/^0+//; $month =~ s/^0+//;
  my @days_per_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  $year++ if $year < 0;
  my $days = $day - 1;
  for (my $i = 0; $i < $month - 1; $i++)
  {
    $days += $days_per_month[$i];
  }
  $days++ if islyear($year) && $month > 2;
  $year--;
  $days += $year * 365;
  $days += int($year / 4);
  $days -= int($year / 100);
  $days += int($year / 400);

  return $days;
}
sub getseconds
{
  my $reqdate = $_[0];
  my $secondsinday = 86400;

  # на 1 января 1970 г.
  my $startday = 719162;

  return (getnday($reqdate) - $startday) * $secondsinday;
}
sub arraydate() {
    $d1 = $_[0];
    $d2 = $_[1];
    my $dt = DateTime->new( year => 1970, month => 1, day => 1 );
    my $formatter = DateTime::Format::Epoch->new(
                          epoch          => $dt,
                          unit           => 'seconds',
                          type           => 'int',   
                          skip_leap_seconds => 1,
                          start_at       => 0,
                          local_epoch    => undef,
                      );
    $f = getseconds($d1);
    while($f != getseconds($d2)) {
        $f += 24*3600;
        push @a, $formatter->parse_datetime($f);
    }
    for(@a) {
        /^(\d+)-(\d+)-(\d+)/;
        push @b, "$3.$2.$1";
    }
    return @b;
}

PM MAIL   Вверх
Egik2
Дата 31.10.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

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



Код

#!/usr/bin/perl
use Time::Local;
use strict;

my @array = ('10.02.2008', '11.02.2008', '12.02.2008', '01.01.2008');

my @newarray = sort is_time_between @array;

for my $ar (@newarray) {
    print $ar."\n";    
}

sub is_time_between {
   my $start_time = $a;
   my $end_time = $b; #string representing date, format for exampe Nov 17 07:06:42 2009 GMT
   my ($start_day, $start_month, $start_year) = $start_time =~ /(\d+).(\d+).(\d+)/;
   my ($end_day, $end_month, $end_year) = $end_time =~ /(\d+).(\d+).(\d+)/;
   my $start_epoch_time =  timegm(0, 0, 0, $start_day, $start_month, $start_year);
   my $end_epoch_time =  timegm(0, 0, 0, $end_day, $end_month, $end_year);
   if($start_epoch_time > $end_epoch_time) {
      return 1;
   }
   elsif ($end_epoch_time == $start_epoch_time) {
      return 0;
   }
   else {
      return -1;
   }
   
}


Это сообщение отредактировал(а) Egik2 - 31.10.2011, 15:36


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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