| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Функция sort. |
| Автор: dixoNICH 27.10.2011, 21:36 |
| Как с помощью функции sort можно отсортировать массв строк типа : "sdasdas 10.04.2008 dadsds" по дате? Как-то не понятно совсемушки |
| Автор: vadiml 27.10.2011, 22:01 |
| Создать хеш в котором ключами будут вытянутые регэкспом даты из строк, а значениями сами строки, и сделать sort keys %этот_хеш |
| Автор: dixoNICH 27.10.2011, 23:21 |
| @a = sort { $a cmp $b } keys %datehash; print Dumper \@a; $VAR1 = [ '10.04.2001', '10.04.2007', '10.04.2009', '10.04.2010', '10.05.2008', '19.02.2008', '19.05.2008', '20.05.2008' ]; не-а |
| Автор: alezzz 28.10.2011, 08:01 |
| Когда вытягиваете дату регуляркой, то отдельно вытягивайте день, месяц и год. В хеш сохраните в обратном порядке: ГГГГ.ММ.ДД. |
| Автор: vadiml 28.10.2011, 09:26 |
| Дату для сортировки обычно хранят в ISO формате YYYY-MM-DD |
| Автор: dixoNICH 28.10.2011, 17:01 |
| Спасибо! Ещё вопрос по дате : Как перевести дату в секунды с помощью DateTime::Format::Epoch;? Как из секунды в дату я понял, а обратно - неа. Надо просто перебрать все даты в промежутке, лучше, чем перевод в секунды - ничего не знаю. |
| Автор: ginnie 28.10.2011, 17:21 |
| dixoNICH, перебрать даты в промежутке можно используя неравенства, перевод в секунды не нужен. |
| Автор: dixoNICH 28.10.2011, 19:28 |
| Не намекнёте, как? ) |
| Автор: ginnie 28.10.2011, 19:32 |
| dixoNICH, даны даты 20110123 20110223 20110323, как выбрать из них те, которые попадают в промежуток от 20110101 до 20110301? |
| Автор: dixoNICH 28.10.2011, 20:33 |
| д >= 20110101 && д<=20110301 но, всё же, как перебирать то даты? ) |
| Автор: ginnie 29.10.2011, 09:04 | ||||
| dixoNICH, прошу прощения, неправильно понял Ваш вопрос! Для преобразования даты в unixtime можно использовать Time::Local::timegm(), которая вернет unixtime в UTC (где нет перехода на летнее время):
$mon должен быть в интервале [0..11] т.е. на 1 меньше реального, а год на 1900 меньше реального, это сделано для совместимости с функцией gmtime(), которая преобразует unixtime в дату. Также можно использовать модуль Date::Calc (он XS, поэтому работает довольно быстро), для этой задачи подойдет функция
|
| Автор: dixoNICH 31.10.2011, 08:20 |
| не смог с помощью этих функций получить время, которое выдаёт time ( |
| Автор: ginnie 31.10.2011, 11:53 |
| dixoNICH, напишите поконкретнее, что не удалось получить. |
| Автор: dixoNICH 31.10.2011, 12:48 |
| уже сделал вручную) |
| Автор: ginnie 31.10.2011, 14:24 |
| А "вручную" это как? |
| Автор: Suppir 31.10.2011, 14:42 | ||
Сортировка с помощью регулярных выражений:
|
| Автор: dixoNICH 31.10.2011, 15:11 | ||
|
| Автор: Egik2 31.10.2011, 15:22 | ||
|