Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > сортировка дат


Автор: Vinnety 21.5.2004, 20:41
baaa.gif Подскажите!
Например есть файл в котором находяться разные даты:
12.07.2001
23.08.1998
11.12.1997

и т.д.

А мне надо их отсортировать. Как это сделать ?

Автор: korob2001 21.5.2004, 21:28
Вообще-то для этой цели используют модули. Я просто изобрёл лесик. Правда я не тестировал его, потому не могу сказать насколько он быстрый.
Всё же, думаю такой вариант подойдёт, но только в том случае, если все даты будут в таком формате, как ты написал. Ещё одно замечание, файл не должен быть слишком большим, например 100-200MB.

У нас есть файл date.txt, в нём хранятся даты.
Так он выглядит:
Код

15.12.2004
10.08.2001
20.04.1977
02.07.1999
10.08.1523
29.11.2002
31.01.1875
18.09.2004
07.09.2003

Такой код отсортировывает даты и выводит их на экран:
Код

#!/usr/bin/perl -w
use strict;
use warnings;
my $path = 'date.txt';
open( F, "< $path" ) or die $!;
chomp( my @arr = <F> );
close( F ) or die $!;
  @arr = map { $_ = join('.', reverse split(/\./) ) } @arr;
foreach ( sort { $a cmp $b } @arr ) {
  print join('.', reverse split(/\./) ),"\n";
}

Но лучше хранить даты в секундах с начала 1970г.
Удачи.

Автор: Secandr 23.5.2004, 10:13
проще сравнивать в секундах с начала эпохт, разве в перле нет чего-то наподобии mktime ?

Автор: ElectricalStorm 24.5.2004, 09:28
use Date::Calc

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)