powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с большими текстовыми файлами.
25 сообщений из 168, страница 3 из 7
Работа с большими текстовыми файлами.
    #37566210
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Mid заменить на Mid$
2) Do While lngCurrentPosition <= Len(strBuffer) заменить на Do While lngCurrentPosition <= lngBufferLength
Хоть Len и быстрая функция, лучше лишний раз не дергать, если можно не дергать.
3) Тынц
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566301
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если для анализа достаточно LIKE, присмотрись к Hytech.
скорость лайка на больших строках и больших количествах за гранью разумного :)
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566400
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил то что предложил Antonariy
действительно vbTextCompare тормозит можно по указанной ссылке взять функцию которая нормально работает
а может в нашем случае можно vbBinaryCompare использовать вряд ли лог файл по-разному пишет ключевые слова


to pureproft
Если для анализа достаточно LIKE, присмотрись к Hytech.
не понятно что значит LIKE, присмотрись к Hytech
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566477
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
парсерпроверил то что предложил Antonariy
действительно vbTextCompare тормозит можно по указанной ссылке взять функцию которая нормально работает
а может в нашем случае можно vbBinaryCompare использовать вряд ли лог файл по-разному пишет ключевые слова


to pureproft
Если для анализа достаточно LIKE, присмотрись к Hytech.
не понятно что значит LIKE, присмотрись к Hytech
google 1-й строчкой дает hytechdb.ru
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566517
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menУХ ты! Провел сравнительный тест на файлике в 55 Мб. Старая моя прога 4 минуты 43 секунды. С Вашей помощью, новая 1 минута 50 сек. Это конечно не 12 секунд, но более чем двукратное сокращение времени, плюс более точная выгрузка информации это уже не плохо. А теперь интереса ради, посмотри все же на AWK.
Скачай вот это: http://gnuwin32.sourceforge.net/packages/gawk.htm
и запусти вот это:
Код: sql
1.
2.
3.
BEGIN{strUserInfo = "some user name"}
/>IncomingTime/ {if (section ~ strUserInfo) print section;	section=""}
                {section = section "\n" $0;}


Сохрани этот текст как test.awk, в первой строке замени "some user name" на то что должно находится в твоей переменной strUserInfo, и запусти его из командной строки:
Код: vbnet
1.
gawk -f test.awk D:\work\LOGOUTPUT\system\tmp\tmp.txt > filtered.txt
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566543
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to pureproft
Hytech я так понял что это бд а нужно просто из файла один раз извлень данные по критерию

to White Owl
это то что нужно не знаю сложно ли освоить синтаксис но прога делает то что нужно и с максимально возможной скоростью
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566547
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут пока я пытался опредилить время выполнения возник такой вопрос
как удалить из файлового кеша файл
а то файл раз читается с диска а все следующие разы читается из памяти что не дает возможности замерять реальное время
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566690
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

Значится попробую по порядку:
1) По заданному критерию найдено 35 фрагментов общим объемом 4246 строк. строки от10 символов до 70 тыс символов. Так что вполне возможно
2) Пробовал отключить все что связано с выгрузкой в файл получил разницу в 1 секунду. Кстати на средней машинке в офисе выполнение идет вообще 5 минут.
3) По алгоритму. Мне надо вытаскивать фрагмент произвольного количества строк от "[дата время]->IncomingTime" до "[дата время]->OutgoingTime". секция "UserInfo" состоит из 2-х строк во второй как раз и прячется искомый параметр собственно юзер "ИВАНОВ ИВАН ИВАНОВИЧ".
4) по gawk систему скачал, пока еще не изучил. Вопрос сразу, мне нужно обрабатывать массив ежедневных логов чаще всего за год полтора это порядка 500-600 файлов. Gawk позволяет поток обработки организовать
5) остальные предложения по коду сейчас буду пробовать. Сейчас в первую очередь вот что сделаю попробую сбросить strFound сразу после вывода информации.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566770
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
парсертут пока я пытался опредилить время выполнения возник такой вопрос
как удалить из файлового кеша файл
а то файл раз читается с диска а все следующие разы читается из памяти что не дает возможности замерять реальное времяНе трать время на ерунду, тебе не нужно знать реальное время, все компьютеры разные. Тебе нужно знать разницу между несколькими вариантами алгоритма. Я для этого вообще считываю все данные в память, чтобы операции ввода-вывода не вносили искажений, и прогоняю алгоритм в цикле несколько раз.

Еще есть профайлер VB Watch 2 , который умеет замерять время каждой операции, суммирует это время, и на красивых понятных гистограммах показывает, какие строчки наиболее тормозят.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566820
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсерпроверил то что предложил Antonariy
действительно vbTextCompare тормозит можно по указанной ссылке взять функцию которая нормально работает
а может в нашем случае можно vbBinaryCompare использовать вряд ли лог файл по-разному пишет ключевые слова


Эврика замена vbTextCompare на vbBinaryCompare сократило время до 1 секунды причем на средней офисной машине, где проход занимал 5 минут 42 секунды. Судя по объему файла результата точность не изменилась. Сейчас сверю то что отбирается с исходным файлом и если все хорошо включу потоковую обработку и разомнусь для начала на 1 Гб логов.

Ой Ребята СПАСИБО!!! Правда мне еще кое чего надо разобрать до косточки, но тут уж интернет мне поможет.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37566831
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy1) Mid заменить на Mid$


Спасибо за ссылочку этим инструментом не пользовался. А еще подскажите чем отличается Mid заменить на Mid$.
В хелпе я нашел только MID и MIDB.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567007
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> А еще подскажите чем отличается Mid заменить на Mid$.

Тем, что Mid работает с типом Variant, поэтому более универсальна, но за универсальность нужно платить, в данном
случае - быстродействием. А Mid$ работает сразу с типом String и поэтому более скорострельна.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567181
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

Спасибо! А где можно почитать про такие нюансы? Я что то в хелпе такого не нашел.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567193
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> А где можно почитать про такие нюансы?

Да вот так на форумах и всплывают такие ньюансы :)
На том-же bbs.vbstreets.ru раньше(в годах 2001-2005) было много таких топиков, пока я бывал там и активно участвовал. :)
Поспрошай там Хакера, может он накидает тебе ссылок на интересные темы :)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567231
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

Проблемка нарисовалась. При попытке поместить в память файл объемом 160 Мб. Вылетает OUT OF MEMORY. Вот была ссылочка по чтению больших файлов, попробую там чего найти.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567268
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторразомнусь для начала на 1 Гб логов
боюсь что для файлов такого размера ничего не получится уж слишком большой размер
если файл в память не поместиться система его будет в файл подкачки грузить те получим только увеличение работы с диском
хотя опять же главное эксперимент если есть 3Г свободной то может и все нормально будет
иначе придется изменить процедуру чтобы она по частям файл читала

рекомендую посмотреть и gawk я попробовал сделать то что написано не разбираясь так она действительно работает очень быстро
и главное то что это одно из предназначений этой проги те прога как раз для этого написана

и еще один момент
можно улучшить прогу если заменить работу со строкой на на работу с массивом байт
те
Dim strBuffer as String
заменить
Dim bytBuffer() as Byte

strBuffer = String(0, Length) -> ReВim bytBuffer(Length - 1)

и функции InStr, InStrRev, Mid заменить на InStrB, InStrRevB, MidB
"B" как раз и означает байт

других изменений не нужно

Отличие в следующем
когда мы читаем строку то из файла читается один байт символ потом он преобразовывается в двухбайтный символ Unicode и сохраняется в строке те строка из 1000 символов будет занимать 2000 байт
при таких огромных размерах логов мы существенно экономим память
правда я не думаю что это ускорит прогу тк разница во времени сканирования 1Г или 2Г практически нулевая
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567317
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот определил на своем компе
1 строка выделяется размером 300Мб размером 400Мб уже не хочет
2 массив байтов выделяется размером 600Мб размером 700Мб уже не хочет
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567319
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

с AWK смотрю но по указанному алгоритму у меня ничего не находит, хотя и отрабатывает быстрою результат =0.

А как файл кусками читать. или вот еще нашел можно проекцию создавать и работать с ней
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567349
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

что такое ReBim? не требует ли дополнительного определения или подключения в референсах?
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567370
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menчто такое ReBim?это ReDim, видимо )
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567374
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ReDim опечатка

а чтобы читать по кускам нужно немного изменить функцию

если у нас только часть файла загружена то здесь
CriteryPosition = InStr(lngCurrentPosition, strBuffer, strUserInfo, VbCompareMethod.vbTextCompare)
'MsgBox CriteryPosition
If CriteryPosition = 0 Then
Exit Do
End If

уже не надо выходить а просто прочитать следующий кусок
If CriteryPosition = 0 Then
FileRead position, strBuffer
End If

единственно что нужно учесть это то что какой-то кусок у нас остался не проверенный
LnEndSectionPos позиция последней найденной записи
а кусок от LnEndSectionPos до BufferSize не исследован

поэтому надо этот кусок поместить в начало буфера в диапазон
[0, BufferSize - LnEndSectionPos]
и читать следующий кусок записывая данные в диапазон
[BufferSize - LnEndSectionPos, BufferSize]

вот и все
остальное без изменений
итак
FileRead теперь объявлена так
FileRead (ByRef strBuffer as string, byval lngBufferSize as long, byval lngBufferPosition as long)

буфер надо выделять заранее и потом передавать во все функции
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567383
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gawk может не работать из-за того что условие вероятно подразумевает что строка одна те символ новой строки является разделителем
это и есть недостаток этой проги что сначала надо узнать синтаксис для построения верного запроса
сам я не пытался синтаксис читать
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567405
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

По чтению сейчас буду разбираться, а вот при изменении strBuffer на bytBuffer информацию больше не находит.
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567455
парсер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл написать тк когда мы ищем байты то и искомые строки надо в байты перевести
те strLineEnd strUserInfo и тд те все что ищем

вот функция
private sub StrToByt(byval strSource as string, byref bytDestination() as Byte)
dim lngIndex as long

ReDim bytDestination(len(strSource)-1)
for lngIndex = 1 to len(strSource)
bytDestination(lngIndex-1)=asc(mid(strSource, lngIndex, 1))
next
end sub

а это ее использование
dim bytLineEnd() as Byte
dim bytUserInfo() as byte

StrToByt(vbcrlf, bytLineEnd)
StrToByt("UserInfo", bytUserInfo)
...
Рейтинг: 0 / 0
Работа с большими текстовыми файлами.
    #37567471
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
парсер,

мдааааааа учиться мне еще и учиться. СПАСИБО Вам за помощь!
...
Рейтинг: 0 / 0
25 сообщений из 168, страница 3 из 7
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с большими текстовыми файлами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]