|
Выбрать файл месячной давности из множества
|
|||
---|---|---|---|
#18+
Есть множество файлов вида img-YYYYMMDD-HHNNSS.jpg, представляющие собой фотографии, сделанные в течение дня (YYYYMMDD — дата съемки, HHNNSS — время съемки). Количество фотографий в день не постоянно — на определенную дату их может не быть вовсе, быть один или множество. Нужно взять фотографию на определенную дату и время, а затем к ней выбрать из множества файлов фотографию примерно на это же время дня, но месячной давности. Если именно на это время фотографий нет, то можно поискать соседние (плюс-минус час). Если на этот день фотографий нет, то можно поискать соседние дни (плюс-минут пару дней). Другими словами, к определенной фотографии нужно подобрать пару, которая была сделана примерно месяц назад примерно в это же время. БД нет, это просто список файлов на диске. Есть ли способ, кроме как просто загнать список файлов в массив и перебирать его? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 11:01 |
|
Выбрать файл месячной давности из множества
|
|||
---|---|---|---|
#18+
При такой формулировке задачи вряд ли получится проще тупого перебора. Придется ещё для каждого файла определять разность времени. С использованием БД задача решается довольно просто. Если задачу возможно немного видоизменить, сделать поиск не по условию "плюс-минус час", а по условию "в соседнем часе" (например если задано 12:01:01 то в выборку попадет 11:59:59) или "в том же часе", тогда можно использовать стандартную команду dir или ls в зависимости от ОС с подстановочными знаками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 11:37 |
|
Выбрать файл месячной давности из множества
|
|||
---|---|---|---|
#18+
Ну вообще я думал собрать файлы в двухуровневый массив (на верхнем уровне элементы массива с ключом HH, внутри него элементы с ключом YYYYMMDD), тогда перебор будет заключаться в поиске подходящего часа, а затем с поиске нужной даты (или соседней, если нужная найдена не будет). Либо преобразовать YYYYMMDD в CCC (порядковый номер дня в году) и для поиска пользоваться просто арифметикой. Но подозреваю, что этап подготовки с перегонкой списка файлов в массив может быть длительным (файлов может быть несколько тысяч) и хотел бы оптимизировать алгоритм уже на этапе отбора файлов. Как это лучше сделать? Использовать ls с подстановочными знаками (чтобы сократить список файлов до одного-двух дней) или использовать readdir, чтобы не вызывать команду ОС? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 12:40 |
|
Выбрать файл месячной давности из множества
|
|||
---|---|---|---|
#18+
С оптимизацией сложность в том, что трудно установить границы диапазона, в котором будут проверяться файлы. Например может оказаться так, что на сервере фотографии только начали сохраняться (или по какой-то причине все фотографии были удалены) и фотографий месячной давности просто не существует. Тогда нужно использовать самую раннюю доступную фотографию (например двухдневной давности), сделанную примерно в то же время дня, что целевая фотография. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 12:42 |
|
Выбрать файл месячной давности из множества
|
|||
---|---|---|---|
#18+
Alibek B.файлов может быть несколько тысячАга, вот уже явно просматривается необходимость древовидной структура каталога с файлами. Дерево как-то поможет? Alibek B.Как это лучше сделать? Использовать ls с подстановочными знаками (чтобы сократить список файлов до одного-двух дней) или использовать readdir, чтобы не вызывать команду ОС?Лучше или хуже по какому параметру? В общем же, не вижу принципиальной разницы. Оба варианта будут неторопливо работать с медленным диском. Подозреваю, что и функции ЯП для работы с ФС тоже не сами по себе работают, а делают вызовы системных функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 16:18 |
|
|
start [/forum/topic.php?fid=23&fpage=15&tid=1459907]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 385ms |
0 / 0 |