|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
все верно просто под отладчиком по-моему удобнее смотреть только файл тестовый тогда маленький надо создать чтобы не ждать в подходе a.readline есть такая проблема строку Вы прочитали а дальше с ней что-то надо делать а делать можно только с помощью vb функций а они для данной задачи не подходят даже если просто писать что-то типа if mid(str, 1, 1)="A" then те брать символ из строки и потом его анализировать то будет очень долго тк строк порядка милилиона и каждая строка порядка сотни сиволов чтобы избежать этого я использую встроенную функцию InStr InStrRev они делают то же сканирование но быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 17:28 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Attribute VB_Name = "FileParseM" это просто не надо писать в файле но бейсик сам дописывает эту строку откройте нотепадом Ваш файл и увидите то же для любого файла vb ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 17:30 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
парсер, Прошу прощения а Вы код не вредакторе пишите? Находит быстро, вот я только зря msgbox не заремил :) и doevents не вставил :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 17:50 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
конечно в редакторе. просто после сохранения я выбираю файл в списке файлов проектов и делаю экспорт. тк я в офисе именно этот пример писал. а в vb6 понятно файл сразу готов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 18:07 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
парсер, А вот интересно если парсить в буфере. могу я по мере прохода по буферу повесить на некую строку метку (или запомнить ее позицию) чтобы потом на нее перейти если содержимое секции UserInfo удовлетворяет заданному критерию? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 18:19 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Test02 работает так 1 находит строку "UserInfo" 2 находит символ новой строки сканируя строку в обратном направлении 3 находит символ новой строки сканируя строку в прямом направлении 4 повторяет это до конца файла соответственно у нас есть позиция начала и конца найденного участка с UserInfo я не знаю формат файла поэтому я могу знать правильно ли это. может UserInfo буфер может содержать символы новой строки. но тогда надо просто начало и конец искать по тем сиволам которые указывает на начало и конец записи UserInfo Когда мы нашли запись с UserInfo мы можем ее обратотать так как нам нужно Если хотим можем запомнить начало и конец буфер как смещение от начала файла то это lngLineBeginPosition lngLineEndPosition Опять же самый быстрый метод обработки когда мы найденный буфер сразу анализируем и экспортируем куда нужно если требуется Просто если запомнить позиции начала конца а потом дополнительно опять как-то обработать найденные записи то получим увеличение времени тк дополнительно время будет тратиться 1 на сохранение найденных позиций в новом файле 2 на чтение найденных позиций из нового файла 3 на чтение найденных записей из исходного файла используя прочитанные на предыдущем шаге позиции начала конца файла ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 19:09 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alex_men, Для работы с большими текстовыми файлами надо использовать регулярные выражения. (Если VB не поддерживает надо подключить к библиотеку Microsoft VBScript Regular Expression 5.5) Думаю в программе, за модификацию которой требуют деньги, они используются. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 08:16 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
gacolДля работы с большими текстовыми файлами надо использовать регулярные выражения. Чушь. Никакой связи между размером файла и использованием регулярных выражений нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 09:06 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alibek B., Регулярные выражения придумали специально для ускорения работы с большими текстами, они зайствованы во многих редакторах Или мы про разное говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 10:13 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Нет. Регулярные выражения используются для сложных манипуляций с текстом. Объемы текста никак с этими манипуляциями не соотносятся. Более того, регулярные выражения применимы не всегда, в некоторых случаях (когда нужен стек или когда объемы текстов очень большие) лучше использовать конечные автоматы или потоковую обработку. В случае с XML остаются автоматы без вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 10:28 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
парсер, Добрый день! А почему выбран бинарный метод обращения к файлу? И я всетаки не очень понимаю Чем OPEN лучше чем работа с FSO? в принципе я так понимаю во втором случае дополнительно надо объявлять переменные, что чуток больше ест ресурсы. может еще есть причины? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 12:08 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alex_men, и еще если доступ к файлу открыть в режиме READ пошустрее не будет? или есть ньюансы в работе команды OPEN?(просто из аналогии с ADODB вопрос) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 12:10 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
файл можно читать любой функцией если помимо чтения надо еще какие-то операции делать с файлами фолдерами то FileSytemObject может быть и удобнее тк в нем много нужных функций для работы с файлами каталогами если заранее известно что файл текстовый то можно его открывать как текстовый но надо помнить что если в файле открытом как текстовый встретятся какие-то специальные управляющие символы то они будут рассматриваться как управляющие ну и размер считанной строки не совпадет с длиной файла тк символы начала строки преобразовываются ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 12:36 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alex_menЧем OPEN лучше чем работа с FSO? Тем, что FSO — лишняя прослойка. Ну и тем что FSO загружает файл только в строку, а OPEN позволит загрузить файл в байтовый массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 14:39 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alibek B., Клевета на FSO :) Никто не мешает сделать так: Код: vbnet 1.
при этом весь файл будет загружен в строковую переменную ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:45 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alibek B., тут скорее будет загвозка как сказал Парсер: парсересли заранее известно что файл текстовый то можно его открывать как текстовый но надо помнить что если в файле открытом как текстовый встретятся какие-то специальные управляющие символы то они будут рассматриваться как управляющие ну и размер считанной строки не совпадет с длиной файла тк символы начала строки преобразовываются И то я думаю можно поисследовать этот вопрос. Я за неимением времени исследование отложу покамест, и воспользуюсь предложенным выше примером кода (да и интересно я с буфером первый раз работаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:50 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alex_menпри этом весь файл будет загружен в строковую переменную А я с этим спорю? Но байтовый массив эффективнее, чем строковая переменная. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:56 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alex_menно надо помнить что если в файле открытом как текстовый встретятся какие-то специальные управляющие символы Какие? Есть только два специальных управляющих символа (0x0D, 0x0A), которые отмечают конец строки. Другие символы ничем не мешают. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:58 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alibek B., Не буду спорить, т.к. я этот вопрос только изучаю. Покамест вродебы получается весьма шустро. А вот кстати нет ли какойнибудь развернутой статейки на эту тему? а то в стандартном учебнике я что то мало что почерпнул. Единственное надо поискать по метке "массивы". может это что еще подскажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 17:11 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Прочитай эту тему: http://bbs.vbstreets.ru/viewtopic.php?f=1&t=43464 Только прочитай до конца. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 17:22 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Alibek B., Спасибо, а вот сходу вопрос. отобрал я нужный мне кусок лога. Могу я его сразу куском влить в текстовый файл? или писать всетаки надо построчно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 17:41 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
Можно сразу куском. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 17:53 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
УХ ты! Провел сравнительный тест на файлике в 55 Мб. Старая моя прога 4 минуты 43 секунды. С Вашей помощью, новая 1 минута 50 сек. Это конечно не 12 секунд, но более чем двукратное сокращение времени, плюс более точная выгрузка информации это уже не плохо. На всякий случай Если Вас не затруднит гляньте код, межет можно упростить, а следовательно и ускорить. Смущают меня пара моментов. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 18:58 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
насколько я понял формат строки для поиска такой >IncomingTime***UserInfo***LineEnd где *** любые символы мне не нравится такое большое время что-то не так 1 сколько в итоге находится записей нужных? 2 сколько времени занимает поиск если находить только UserInfo те оставить только это остальное закоментить CriteryPosition = InStr(lngCurrentPosition, strBuffer, strUserInfo, VbCompareMethod.vbTextCompare) - оставить эту строку закоментить тоже для этого пункта strFound = Mid(strBuffer, LnBeginSectionPos + Len(strLineBegin), LnEndSectionPos - LnBeginSectionPos - Len(strLineBegin)) - закоментить 3 "Смущают меня пара моментов" каких? я когда тестировал создал файл 100 мб и одну запись UserInfo так он читался 15 сек пока я не вижу откуда появляется столько дополнительного времени ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 19:53 |
|
Работа с большими текстовыми файлами.
|
|||
---|---|---|---|
#18+
вообще надо внутренность Do while loop закоментить а потом по логичестким кускам раскоментить чтобы понять какие куски тормозят при большом количестве найденных записей может тормозить strFound = ... ну и конечно запись в файл но все равно не настолько диск читается в несколько раз быстрее чем пишется но это 2-4 раза а тут все 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 20:01 |
|
|
start [/forum/topic.php?fid=60&msg=37566036&tid=2158182]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 327ms |
total: | 462ms |
0 / 0 |