powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выбрать файл месячной давности из множества
5 сообщений из 5, страница 1 из 1
Выбрать файл месячной давности из множества
    #39828693
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть множество файлов вида img-YYYYMMDD-HHNNSS.jpg, представляющие собой фотографии, сделанные в течение дня (YYYYMMDD — дата съемки, HHNNSS — время съемки). Количество фотографий в день не постоянно — на определенную дату их может не быть вовсе, быть один или множество.
Нужно взять фотографию на определенную дату и время, а затем к ней выбрать из множества файлов фотографию примерно на это же время дня, но месячной давности. Если именно на это время фотографий нет, то можно поискать соседние (плюс-минус час). Если на этот день фотографий нет, то можно поискать соседние дни (плюс-минут пару дней).
Другими словами, к определенной фотографии нужно подобрать пару, которая была сделана примерно месяц назад примерно в это же время.
БД нет, это просто список файлов на диске. Есть ли способ, кроме как просто загнать список файлов в массив и перебирать его?
...
Рейтинг: 0 / 0
Выбрать файл месячной давности из множества
    #39828700
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При такой формулировке задачи вряд ли получится проще тупого перебора. Придется ещё для каждого файла определять разность времени. С использованием БД задача решается довольно просто.

Если задачу возможно немного видоизменить, сделать поиск не по условию "плюс-минус час", а по условию "в соседнем часе" (например если задано 12:01:01 то в выборку попадет 11:59:59) или "в том же часе", тогда можно использовать стандартную команду dir или ls в зависимости от ОС с подстановочными знаками.
...
Рейтинг: 0 / 0
Выбрать файл месячной давности из множества
    #39828744
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще я думал собрать файлы в двухуровневый массив (на верхнем уровне элементы массива с ключом HH, внутри него элементы с ключом YYYYMMDD), тогда перебор будет заключаться в поиске подходящего часа, а затем с поиске нужной даты (или соседней, если нужная найдена не будет). Либо преобразовать YYYYMMDD в CCC (порядковый номер дня в году) и для поиска пользоваться просто арифметикой.
Но подозреваю, что этап подготовки с перегонкой списка файлов в массив может быть длительным (файлов может быть несколько тысяч) и хотел бы оптимизировать алгоритм уже на этапе отбора файлов.
Как это лучше сделать? Использовать ls с подстановочными знаками (чтобы сократить список файлов до одного-двух дней) или использовать readdir, чтобы не вызывать команду ОС?
...
Рейтинг: 0 / 0
Выбрать файл месячной давности из множества
    #39828746
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С оптимизацией сложность в том, что трудно установить границы диапазона, в котором будут проверяться файлы.
Например может оказаться так, что на сервере фотографии только начали сохраняться (или по какой-то причине все фотографии были удалены) и фотографий месячной давности просто не существует. Тогда нужно использовать самую раннюю доступную фотографию (например двухдневной давности), сделанную примерно в то же время дня, что целевая фотография.
...
Рейтинг: 0 / 0
Выбрать файл месячной давности из множества
    #39828864
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.файлов может быть несколько тысячАга, вот уже явно просматривается необходимость древовидной структура каталога с файлами. Дерево как-то поможет?

Alibek B.Как это лучше сделать? Использовать ls с подстановочными знаками (чтобы сократить список файлов до одного-двух дней) или использовать readdir, чтобы не вызывать команду ОС?Лучше или хуже по какому параметру?
В общем же, не вижу принципиальной разницы. Оба варианта будут неторопливо работать с медленным диском.
Подозреваю, что и функции ЯП для работы с ФС тоже не сами по себе работают, а делают вызовы системных функций.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выбрать файл месячной давности из множества
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]