Первый раз проводке - пожалуйста, быть нежным :)Excel VBA - Импорт Разделы Textfile (Binary Import)
У меня есть большой текстовый файл (около 50Мб), который находится на нашем рабочем сервере. Файл сортируется по ключевому слову в порядке возрастания. Мне было интересно, можно ли искать и импортировать раздел файла, который соответствует ключу, используя двоичный поиск.
Например, код будет содержать 512kb файла и посмотреть, нужны ли данные в той части файла, если нет, перейдите к следующему 512kb, пока не найдете нужные нам данные. Кроме того, у ключа будет несколько строк (2K) данных, поэтому код должен будет искать начальную и конечную точки ключа.
Я надеюсь сэкономить время при загрузке файла, только загружая раздел файла, который имеет данные, которые нужны пользователю. Существует новый файл, созданный каждый час с последними данными, и из-за медленного сервера (особенно при подключении удаленно (т. Е. Работа из дома) в настоящее время требуется много времени, чтобы загрузить весь файл в отчет.
кто-нибудь знает, возможно ли это?
Большое спасибо
Привет Ральф, спасибо за быстрый ответ. То, как я хочу, чтобы он работал, - это начать посередине, и если ключ больше, чем тот, который находится посередине, не обращайте внимания на все выше него, затем найдите середину оставшейся половины файла> полоскание и повторите до ключ найден. Если это невозможно, это нормально. Просто подумал, что я задам вопрос. Просто быстрый вопрос о вашем коде - будет ли решение выше быстрее, чем «textfile.readall», а затем просматривает каждую строку, чтобы найти требуемые данные? – Tabias
Краткий ответ: вышеупомянутое решение является лучшим, если вы имеете дело с большими файлами (такими как ваши). С большинством текстовых редакторов вы даже не можете открывать большие текстовые файлы (100 МБ или больше). Просто дайте ему попробовать с NotePad, и вы увидите. Вышеприведенный код лучше всего, потому что он читает строки за строкой только в памяти. ** Не ** весь файл сразу. Я обработал с вышеуказанным кодом даже файлы> 500 МБ без проблем. Ваше предложение было бы правильным, если бы там был инструмент, который поддерживает это. Но даже использование ODBC для соединения с «SELECT» потребует сканирования всего ** файла **. – Ralph
Привет, Ральф, я просто попробовал ваше решение, потребовалось около двух/трех минут, чтобы выполнить строку «Line Input #intPointer, strLine». Я предполагаю, что когда excel получает доступ ко всему файлу на сервере и загружает его. Чтобы дать вам представление о том, как медленно, во время «загрузки» мое соединение Lan использовалось только 1% (100 Мбит/с). – Tabias