Название: Анализ списка файловых путей. Отправлено: _Bers от Ноябрь 01, 2014, 21:07 Добрый вечер.
Предупреждаю сразу: данная тема не содержит проблемы. И создана исключительно для интересного время провождения. Итак, дабы немножко скоротать вечер за интересной (я надеюсь) задачкой, решил запостить ребус: Рассмотрим следующую иерархию каталогов, которая содержит библиотеки: Цитировать external | |--common_lib | | | |--lib1 | | |--include | | | `--lib1.h | | |--lib32 | | | `--lib1.lib | | `--lib64 | | `--lib1.lib | `--lib2 | |--include | | `--lib2.h | |--lib32 | | `--lib2.lib | `--lib64 | `--lib2.lib | `--add |--include | `--add.h |--lib32 | `--add.lib `--lib64 `--add.lib Очевидно, что в данном случае получается 3 библиотеки: lib1, lib2, add. Как именно человек, глядя на иерархию каталогов определяет имена и месторасположение библиотек? Очень просто: Он видит файлы из которых могут состоять библиотеки: *.lib и *.h И находит каталог, общий для этих файлов. Имя этого каталога и определяет и имя, и месторасположение библиотеки. -------------------------------------- По задачке мы не видим наглядно никакой иерархии. Нам на вход дали очень большой список файловых путей. Например такой: Цитировать external/common_lib/lib1/include/lib1.h external/common_lib/lib1/lib32/lib1.lib external/common_lib/lib1/lib64/lib1.lib external/common_lib/lib2/include/lib2.h external/common_lib/lib2/lib32/lib2.lib external/common_lib/lib2/lib64/lib2.lib external/add/include/add.h external/add/lib32/add.lib external/add/lib64/add.lib Список может быть не отсортированным. В нем могут оказаться "левые" пути, например к файлам документации, или к ресурсам. В нем могут оказаться "левые" пути, например к каталогу вообще без файлов. (для простоты будем считать, что имя без расширения - это каталог) Если в пути, в имени каталога или файла присутствует *ignore*, то такой путь должен быть сразу же проигнорирован. Если в пути, в имени каталога, или файла сначала постречалось *32, а затем *64, то должно быть выдано предупреждение, а сам файл - проигнорирован. Если в пути, в имени каталога, или файла сначала постречалось *64, а затем *32, то должно быть выдано предупреждение, а сам файл - проигнорирован. В качестве расширений файлов из которых может состоять либка - h,hpp,lib,dll 1. Нужно просканировать список путей, и обнаружить месторасположение и имена всех библиотек. 2. Пользователь указывает имя библиотеки, и адресную модель (32/64), и на выходе получает пути к хэдэрам библиотеки, пути к либкам, и список имен либок. Название: Re: Анализ списка файловых путей. Отправлено: Igors от Ноябрь 03, 2014, 12:33 Задачу хорошо описали, но сама задача мне нисколько не интересна. Пришлось бы делать - ну сделал бы без всяких хитростей, напр так
Код Для каждой строки: проверил подходит ли extensions, имя либы, и что архитектура встречается 1 раз и что др нет. Конечно можно это все написать, но не думаю что эта рутина кому-то интересна. Если надо пошустрее искать - сократил бы исходный контейнер напр переставив бракованные строки в хвост (напр по архитектуре и расширению). Возможно и есть какой-то др способ, но если и так за полчаса можно сделать - чего тратить время на поиски? :) Название: Re: Анализ списка файловых путей. Отправлено: _Bers от Ноябрь 03, 2014, 14:28 Задачу хорошо описали, но сама задача мне нисколько не интересна. Очень жаль, что задача не вызвала интереса. На самом деле, если попробовать решить - вылезут различные нюансы (не каждый сможет придумать решение за полчаса). И окажется, что решений множество разной степени костыльности. Интересно было бы глянуть на интересные решения: сочетание простоты и скорости работы. Название: Re: Анализ списка файловых путей. Отправлено: qate от Ноябрь 05, 2014, 10:21 а почемубы не изменить условия задачи ? )
положить все h в один каталог, 32 и 64 бита разделить по lib32 и lib64 |