![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
ohoho |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 22.6.2003 Репутация: нет Всего: нет |
Подскажите идею реализации!
есть некий текстовой файл - приведу фрагмент: ..... *** Код организации 5085 *** Телефон Дата Гор Т Вр У Пр Сумма Выз.Тел 9723003 0529 269 3 0835 0 3 29.70 21615 9723003 0530 269 3 0536 0 3 29.70 21615 Кол-во разговоров 2 Продолжительность 6 Начислено 59.40 Телефон Дата Гор Т Вр У Пр Сумма Выз.Тел 923408 0514 236 3 0847 0 1 4.50 43003 9723408 0527 224 3 0346 0 5 49.50 60531 Кол-во разговоров 2 Продолжительность 6 Начислено 54.00 ....... вернее по почте придет архив, содержащий такой файл. Я хочу приспособить nnCron для отслеживания факта появления архива в заданной директории, распаковки его и редактирования с целью автоматического удаления строк, начинающихся с определенного номера и - очень желательно - одной строчки выше удаляемого блока (нач. с Телефон Дата) и одной строчки ниже ( Кол-во разговоров). Потом все должно запаковаться обратно в архив с замещением старого файла. Все это полностью без моего участия. Как и чем лучше организовать такое редактирование текстового файла, чтобы без всякой интерактивности, в фоновом режиме? Спасибо за внимание. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
С распаковкой и запаковкой не работал, не знаю. Должно быть не сложно...
Могу написать для тебя функцию удаления всего блока с телефоном, который ты ей передашь, это не сложно... Какой разделитель между колонками? (пробел, табуляция...) И, если не секрет, зачем тебе это? -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
ohoho |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 22.6.2003 Репутация: нет Всего: нет |
За функцию буду искренне признателен! Разделитель между колонками - пробел. Прошу обратить внимание, что не весь текст в файле форматирован по колонкам. Зачем мне это - вовсе не секрет. Это лог междугородних переговоров с нашего предприятия. Я иногда делаю звонки строго по работе. Наш дотошный экономист заставляет делать подробный отчет по каждому звонку, а я не всегда все помню. Вопрос об оплате тут не стоит, так как мы являемся предприятием связи и не платим сами себе за свои услуги, но отчитываться, как пацану, куда это я звонил - надоело уже. Так что это вопрос не корысти, а чисто политический!
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
С разделителем поторопился, не понадобился.
![]() Если я тебя правильно понял, то в одном блоке находятся строки с одним номером, в другом блоке с другим номером. Если так, то вот образец функции, которая ищет блок, и проверяет на то, ЧТО ПЕРВАЯ СТРОКА в блоке начинается с указанного номера телефона, и в положительном случае переписывает в этот же файл без найденого блока. Если первая строка не такая, то ищется следущий блок. Она ищет и удаляет только один блок. Функция возвращает "True", если удаление блока произошло.
![]() -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
ohoho |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 22.6.2003 Репутация: нет Всего: нет |
Спасибо!
Что-то пока не получается применить его к конкретному файлу - я в Access пробовал, функцию поставил в модуль, а его привязал к кнопке - при запуске пишет, что "Объект не содержит программируемый объект "StrFileName"". Наверное, я туплю в плане найти в коде место, где нужно прописать имя файла. Сейчас попробую в "чистом" VB. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Получилось?
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
ohoho |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 22.6.2003 Репутация: нет Всего: нет |
Получилось, классно!
Показал одному парню твой код - он сказал, что сделано очень красиво. Жаль только, что текстовой файл на 3 мегабайта обрабатывался на PIII около 2х часов. Но главное - работает! Большое спасибо. (Всегда завидовал белой завистью толковым программерам - я то сам всего лишь сетевой администратор...) Попробуем как-нибудь ускорить выполнение, а то не очень фоново получается. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Не стоит благодарности. Это ведь форум, сюда приходят за помощью
![]() Если будут проблемы с оптимизацией пиши на мыло [email protected] Счастливо. ![]() -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
ohoho тут есть одна приколка. Называется DoEvents. Она позволяет смотреть за другими процессами во время нахождения в цикле. Это только предположение, но возможно если ты добавишь эту строчку прямо перед Loop, то эти два часа превратятся во что-нибудь более приемлимое. Помоему когда я раньше с циклами экспериментировал, то они подвешивали компер при больших количествах прокруток, типа ушел в бесконечный цикл. А тут тем самым что ты написал DoEvents ты как бы говоришь, что возможно ты скажешь, что цикл надо остановить или что-нибудь такое и цикл как бы крутится не задумывясь о том "нужен я или нет"
![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
cardinal, осмелюсь немного поправить. Комнда DoEvents дает задание, обработать все события твоей прграммы. То есть дав такую команду, виндоз один раз обработает все клики, паинты, ресайзы, которые пришли на форму, но небыли обработаны из-за занятости программы. Так что эта команда скорее тормозит, чем ускоряет. Ее можно использовать тогда, когда во время обработки большого объема данных, требуется контролировать пользователя. Например то, что он нажал кнопку Отмена. Без этой команды в цикле обработки, событие клик кнопки, обработается только по завершении цикла. В случае ohoho, не требуется обрабатывать внешних вмешательств, поэтому эта команда будет только тормозить.
Долго он может работать из-за того, что он сначала сразу читает весь файл в переменную. Я так сделал, потому-что не думал что лог может быть 3 Мб. Оптимизировать можно по другому. Если обрабатывать строки сразу, во время чтения, т.е. читать строку и сразу проверять, если она нам не нужна, то записывать ее в другой файл, а если нужна(содержит искомый телефон), то читать не записывая до тех пор, пока не кончится блок. Потом дописать кусок оставшегося файла. Но этот алгоритм надо еще проверить, может быть он даже медленее. ![]() ![]() -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Скорее всего медленнее...
![]() -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
да, согласен Провел парочку экспериментов. Да в принципе быстрее с DoEvents не становится, но с другой стороны польза то с ним есть. У меня например, при паралельном долбании компера, на цикл в 200000 оборотов уходило секунд так на 10 больше (чем без DoEvents), но я мог паралельно в шахматы играть ![]() ![]() Ну ладно - это фигня. Настоящая проблема в том, как сделать алгоритм получше. ohoho, а у тебе примерно изсвестно в каком месте файла сидит твой блок. Тут не надо говорить 100% в последних 100 строках (что конечно лучше), а тут например уже тот факт, что ты знаешь, что в вероятность того, что блок в последней четверти файла может офигенно помочь. Пиши будем выдумывать алгоритм ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Unregistered |
|
|||
Unregistered |
Я вот просил то же самое на другом форуме, так сначала мне модератор сказал, что тут не надо быть гуру, я спросил, а нельзя ли поконкретнее? Тогда он заподозрил меня в попытке халявной экслуатации чужих мозгов, потом сказал, что на мой вопрос нельзя ответить, так, как я сам не знаю, что хочу и сказал, что переведет мой вопрос в раздел "Работа". Стало как то грустно и я вопрос там вообще снял. Когда я раньше помогал в конфах и в эхе по настройке Novell Netware, Windows NT Sever или по TCP/IP маршрутизации, у меня вовсе не было ощущения, что меня кто-то использует... Хотя бывает, что некоторые задают такие вопросы, что видно, что человек или ленится нажать F1 или замахивается на очень глобальные вещи не имея вообще никакой теоретической базы. Одно дело, если он просто молод и жаден до великих свершений, что есть хорошо. Другое дело, если он ленив и не хочет напрягаться. Увы, я уже не попадаю под первое и надеюсь, что не произвожу впечатление второго :- ))). Короче - спасибо! Насчет примерного местонахожения блока в файле - то нет, это будет по разному.
|
|||
|
||||
Unregistered |
|
|||
Unregistered |
Если применить чисто обывательский подход. В ручном режиме я обычно в своем любимом FARe захожу в архив, делаю на файле внутри архива F4 (редактирование), F7 (поиск), ввожу номер, прыгаю на строку вверх (нач. с Телефон), Home (в начало строки), шифтом и стрелкой вниз тяну блок выделения до конца блока с номером, прихватываю строчку ниже (нач. с Кол-во разговоров), грохаю блок, выхожу с сохранением, подтверждаю изменение в архиве (Ctrl+Enter) и всё готово и очень быстро, отвлекая при этом присутствующих каким нибудь анекдотом для коспирации. Я и подумал, нельзя ли это автоматизировать и не появляться физически в том кабинете. локальной сети пока там нет, иначе мои мысли пошли бы по другому пути, но в перспективе я сеть дотяну.То есть я то сам, руками делаю это достаточно быстро! Первое,что пришло в голову - использовать nnCron - он отследит появление архива, распакует его. После редактирования он же все запакует, заместив измененный файл. Для этого я применю или скрипты nnCron или вызываемые им же нужные мне bat файлы. Может быть есть смысл притянуть сюда какой нибудь текстовой редактор, который можно запрограммировать? Я думал уже об импорте текстовухи в Excel, но он не влазит в лист из=за ограничения кол-ва строк. А может макрос в ворде спасет? Хотя это, наверное возврат к приведенной выше функции?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |