![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Как с помощью функции sort можно отсортировать массв строк типа : "sdasdas 10.04.2008 dadsds" по дате? Как-то не понятно совсемушки
![]() |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Создать хеш в котором ключами будут вытянутые регэкспом даты из строк, а значениями сами строки, и сделать
sort keys %этот_хеш |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
@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 |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
Когда вытягиваете дату регуляркой, то отдельно вытягивайте день, месяц и год. В хеш сохраните в обратном порядке: ГГГГ.ММ.ДД.
|
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Дату для сортировки обычно хранят в ISO формате
YYYY-MM-DD |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Спасибо!
Ещё вопрос по дате : Как перевести дату в секунды с помощью DateTime::Format::Epoch;? Как из секунды в дату я понял, а обратно - неа. Надо просто перебрать все даты в промежутке, лучше, чем перевод в секунды - ничего не знаю. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, перебрать даты в промежутке можно используя неравенства, перевод в секунды не нужен.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Не намекнёте, как? )
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, даны даты 20110123 20110223 20110323, как выбрать из них те, которые попадают в промежуток от 20110101 до 20110301?
Это сообщение отредактировал(а) ginnie - 28.10.2011, 19:32 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
д >= 20110101 && д<=20110301
но, всё же, как перебирать то даты? ) |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, прошу прощения, неправильно понял Ваш вопрос!
Для преобразования даты в unixtime можно использовать Time::Local::timegm(), которая вернет unixtime в UTC (где нет перехода на летнее время):
$mon должен быть в интервале [0..11] т.е. на 1 меньше реального, а год на 1900 меньше реального, это сделано для совместимости с функцией gmtime(), которая преобразует unixtime в дату. Также можно использовать модуль Date::Calc (он XS, поэтому работает довольно быстро), для этой задачи подойдет функция
Это сообщение отредактировал(а) ginnie - 29.10.2011, 09:06 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
не смог с помощью этих функций получить время, которое выдаёт time (
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, напишите поконкретнее, что не удалось получить.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
уже сделал вручную)
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
А "вручную" это как?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |