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

Поиск:

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


Бывалый
*


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

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



Как с помощью функции sort можно отсортировать массв строк типа : "sdasdas 10.04.2008 dadsds" по дате? Как-то не понятно совсемушки smile Помогите мыслями, пожалуйста.
PM MAIL   Вверх
vadiml
Дата 27.10.2011, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создать хеш в котором ключами будут вытянутые регэкспом даты из строк, а значениями сами строки, и сделать 
sort keys %этот_хеш
PM MAIL Jabber   Вверх
dixoNICH
Дата 27.10.2011, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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'
        ];
не-а
PM MAIL   Вверх
alezzz
Дата 28.10.2011, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Когда вытягиваете дату регуляркой, то отдельно вытягивайте день, месяц и год. В хеш сохраните в обратном порядке: ГГГГ.ММ.ДД. 
PM MAIL   Вверх
vadiml
Дата 28.10.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дату для сортировки обычно хранят в ISO формате
YYYY-MM-DD
PM MAIL Jabber   Вверх
dixoNICH
Дата 28.10.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо!
Ещё вопрос по дате : Как перевести дату в секунды с помощью DateTime::Format::Epoch;?
Как из секунды в дату я понял, а обратно - неа.
Надо просто перебрать все даты в промежутке, лучше, чем перевод в секунды - ничего не знаю.
PM MAIL   Вверх
ginnie
Дата 28.10.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



dixoNICH, перебрать даты в промежутке можно используя неравенства, перевод в секунды не нужен.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 28.10.2011, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не намекнёте, как? )
PM MAIL   Вверх
ginnie
Дата 28.10.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



dixoNICH, даны даты 20110123 20110223 20110323, как выбрать из них те, которые попадают в промежуток от 20110101 до 20110301?

Это сообщение отредактировал(а) ginnie - 28.10.2011, 19:32


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 28.10.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



д >= 20110101 && д<=20110301

но, всё же, как перебирать то даты? )
PM MAIL   Вверх
ginnie
Дата 29.10.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



dixoNICH, прошу прощения, неправильно понял Ваш вопрос!
Для преобразования даты в unixtime можно использовать Time::Local::timegm(), которая вернет unixtime в UTC (где нет перехода на летнее время):
Код

$time = timegm($sec,$min,$hour,$mday,$mon,$year);

$mon должен быть в интервале [0..11] т.е. на 1 меньше реального, а год на 1900 меньше реального, это сделано для совместимости с функцией gmtime(), которая преобразует unixtime в дату.
Также можно использовать модуль Date::Calc (он XS, поэтому работает довольно быстро), для этой задачи подойдет функция
Код

($year,$month,$day) = Add_Delta_Days($year,$month,$day, $Dd);



Это сообщение отредактировал(а) ginnie - 29.10.2011, 09:06


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 31.10.2011, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не смог с помощью этих функций получить время, которое выдаёт time (
PM MAIL   Вверх
ginnie
Дата 31.10.2011, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



dixoNICH, напишите поконкретнее, что не удалось получить.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 31.10.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



уже сделал вручную)
PM MAIL   Вверх
ginnie
Дата 31.10.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



А "вручную" это как?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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