Цитата |
---|
bedvit написал: Итак, функция "FindInCSV" в категории функций "Bedvit_xll" (не реклама, а старая версия библы, не стал заморачиватся, переименовывать). |
Штука действительно очень шустрая (в сравнении с тормозным эксель, где нельзя даже нормально искать строку через фильтр на огромных файлах, ибо зависает надолго и потом закрывается). Сделал точный хронометрах производительности, для этого использовал таймер от Free Stopwatch. Благо, что были нарезанные по 500 000 строк файлы, полученные от оригинала в 10 Гб. Это позволяет проследить процесс в динамике. Всего файлов было 116, поименованы от 0 до 115. Выбирать идентификатор для поиска старался максимально близко к последним строкам. Ниже - показатели производительности (номер файла и время поиска):
0 - 5 сек (не информативно, т.к. в этом файле мало идентификаторов)
10 - 35 сек
20 - 1 мин 08 сек
30 - 1 мин 42 сек
40 - 2 мин 18 сек
50 - 2 мин 51 сек
60 - 3 мин 31 сек
70 - 4 мин 06 сек
80 - 4 мин 46 сек
90 - 5 мин 30 сек
100 - 6 мин 36 сек
115 - 7 мин 02 сек
Таким образом, можно считать, что файл в 10 Гб обрабатывается максимум в течение 7 мин (если строка для поиска находится в самом конце файла).
Поиск производится построчно, проверяя каждый столбец последовательно, друг за другом.
На что еще обратил внимание: можно в строке для поиска использовать любой другой идентификатор, т.е. не только из 12 столбца, а вообще любые символы. Результатом поиска также является строка, где эти символы присутствуют.
Это расширяет возможности инструмента и делает его универсальным инструментом для поиска в csv-файлах.
Сканирование останавливается при нахождении строки для поиска. А можно ли доработать инструмент так, чтобы на других (т.е. несколько раз повторяющихся) найденных идентификаторах (не обязательно в 12-ом столбце, я так понял привязки к столбцу, как таковому, нет) добавлялась новая строка, ниже предыдущей. Т.е. поиск не заканчивался на первом совпадении, а продолжался так до конца файла, добавляя все новые строки при появлении повторяющихся идентификаторов. Так можно реализовать фильтр по произвольным символам, который в реальном времени будет добавлять новые строки, если идентификаторов в файле будет найдено несколько.
Цитата |
---|
bedvit написал: Можно использовать в VBA через Application.Run |
Т.к. я ало чего понимаю в макросах, то использовал файлы методом тыка. Открыл xlsb, ввел путь к папке, далее идентификатор. Что-то не получилось. Далее запустил xll и все начало работать. Полагаю, что реализация xll возможна в виде макроса. Научите, как это делается? Нужно в меню "Разработчик" - Visual Basic ввести код макроса? А как его просмотреть?
Очень познавательный получился тред. Спасибо всем участникам за помощь и рекомендации.