|
|
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Суть такова: есть текстовый файл с множеством строк одинаковой структуры. Нужно удолить стоки по некоторому признаку. Например, начинающихся с 'бла-бла-бла'. Вся загвозка в том, что файл очь балшой (десятки тысяч строк), а такую обработку приходица делать давольно регулярно. Поэтому простой перебор всех строк не очь удачное решение: долго. Хотелось бы поступить так же как с записями в таблице БД: DELETE FOR Table WHERE Field='бла-бла-бла'... так намного дешевле... Есть варианты? Буду очь благодарен. З.Ы. Преобразование txt-->>БД-->>txt нежедательно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 11:20 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
> простой перебор всех строк не очь удачное решение: долго. > Хотелось бы поступить так же как с записями в таблице БД Количество байт данных во втором случае больше, чем в первом, а скорость - выше. Следовательно, в 1-м случае надо использовать другой алгоритм. > файл очь балшой (десятки тысяч строк) Он всё равно весь поместится в памяти (возм., виртуальной). Загони файл в массив строк и используй функции работы со строками. Если и это "дорого", используй утилиты типа GREP - вызывай её из кода и получай результат в виде (промежуточного) текстового файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 12:14 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
попобую... о результатах сообщу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 12:43 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
DionX З.Ы. Преобразование txt-->>БД-->>txt нежедательно... А и не надо преобразовывать - есть ODBC Microsoft Text Driver (*.txt; *.csv) Может его и пользовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 14:48 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
To Marvan: ODBC Microsoft Text Driver не выбирает записи, он конвертирует один формат в другой. GREP работает быстрее драйвера: за 30 лет его код вылизан до совершенства. Обработка не требует SQL-запроса к SQL-серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 18:17 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
2 Processor Использовать в своей программе Шароварную утилиту от стороннего разработчика - хоть и продуктивно, но некрасиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 19:46 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
To Marvan: В топике не было речи о FreeWare (если не считать'бла-бла-бла'... так намного дешевле) Речь идёт о методах решения задачи. Если надо определиться, действительно ли GREP делает то, что нужно , можно воспользоваться и (a la) FreeWare. Если программер считает, что в данном случае "красивше" самостоятельно запрограммировать то, что делает GREP, то он использует объект RegExp (GREP=Global Regular Expression Print==>RegExp) и ручками пропишет и верифицирует код (на ограниченном наборе данных). Если ему необходимо сделать работу продукта надёжной, полный смысл использовать проприетарный GREP ("от Microsoft" он называется Qgrep, от JGSoft - PowerGREP). А о том, что GREP решает такие задачи, говорит почти 40-летний возраст этой утилиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:01 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Продолжу тему, если позволите. Есть текстовый файл размером ~300Мб - около 4млн строк строки представляют собой несколько наборов символов, разделенных vbTab- назовем их "колонки" Задача: распарсить файл, а именно выделить одну из "колонок", удалить дубли и записать в файл. В принципе задачу решил, но при небольших размерах файла, а при указанном программа виснет на этапе чтения первой строки. Код: plaintext 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. Не подскажете, как оптимизировать код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 21:50 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
sv375Не подскажете, как оптимизировать код? Эта задача элеметарно решается с помощью DTS. Если у вас, конечно, есть SQL Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 09:42 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
sql сервера нет. Хотелось бы обойтись без серверов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 09:48 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Вот другой код, считываю файл не построчно, а целиком в строку. Получаю другую ошибку "Не хватает места в строке" Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 10:00 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Вот что то я не помню чтобы для чтения файлов определял номер как fo = FreeFile() Делал просто fo = FreeFile вот кусочек кода для чтения файла и запихивания его в dbf табличку глянь, может поможет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. С уважением, Николай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 10:44 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
marvan DionX З.Ы. Преобразование txt-->>БД-->>txt нежедательно... А и не надо преобразовывать - есть ODBC Microsoft Text Driver (*.txt; *.csv) Может его и пользовать? Можно использовать OLEDB. Строка подключения навроде: cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathIn & ";" & "Extended Properties=Text" При этом может оказаться полезно почитать про файлик schema.ini. Далее - все примитивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 10:52 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, приведенный код считывает файл построчно, преобразует строку в массив и добавляет один из элементов в таблицу. Это понятно, только у меня виснет при считывании строки. Если же читаю сразу весь файл, то не виснет, но выдает ошибку, что файл не лезет в строку. Непонятно почему в string не лезет 300Мб. тип string вроде должен вмещать до 2млрд.символов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 11:43 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Мой код тоже виснет??? Попробуй поискать по FSO... А может все таки прога не виснет, а пытается открыть файл размером в 300 метров, и у тебя просто не хватает терпения??? Просто у меня была похожая задача, там текстовый файл был примерно 100 метров и таким вот способом открытия он на очень продолжительное время подвешивал машину. И сразу вопрос старым и мудрым.... Заметил такую странность если открывать такие вот огромные файлы при помощи блокнота то он тупо сдыхает, однако внутренний просмотрщик встроенный в тотал командер открывает (в режиме read only) файлы моментом и поиск строки тоже осуществляется очень быстро. С чем это может быть связано? С уважением, Николай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 12:49 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
gjghjc А может все таки прога не виснет, а пытается открыть файл размером в 300 метров, и у тебя просто не хватает терпения??? Просто у меня была похожая задача, там текстовый файл был примерно 100 метров и таким вот способом открытия он на очень продолжительное время подвешивал машину. Сразу при запуске переходит в "не отвечает". Ждал минут 10-так и не проснулась. Меж тем Akelpad открывает его по F4 секунд за 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 13:19 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
sv375Непонятно почему в string не лезет 300Мб. Исчерпывается свободная память. Или, думаешь, что переменная обязана свопиться на диск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 13:55 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
gjghjcИ сразу вопрос старым и мудрым.... Заметил такую странность если открывать такие вот огромные файлы при помощи блокнота то он тупо сдыхает, однако внутренний просмотрщик встроенный в тотал командер открывает (в режиме read only) файлы моментом и поиск строки тоже осуществляется очень быстро. С чем это может быть связано? Разный подход - в одном случае примитивный, когда все грузится в память (ту же переменную), а в другом все читается посегментно, что чуть посложней но позволяет работать с любым размером файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 13:59 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
AndrFРазный подход - в одном случае примитивный, когда все грузится в память (ту же переменную), а в другом все читается посегментно, что чуть посложней но позволяет работать с любым размером файла. Я так понимаю что примитивный подход это так как предложено мной и sv375 :) А вот по поводу чтения посегментно хотелось бы почитать подробней. Если есть ссылочки буду благодарен. Потому как чует мое сердце скоро мне опять прийдется резать 100-метровые файлы :) С уважением, Николай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 14:18 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Х3.. может через msaccess ? залинковать txt как таблицу БД? а потом отсиквелить её (всмысле БД). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 14:34 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
gjghjcЯ так понимаю что примитивный подход это так как предложено мной и sv375 :) А вот по поводу чтения посегментно хотелось бы почитать подробней. А что там сложного? С диска в память читается только та часть файла что выводится в данный момент на экран (ну или несколько больше). Для редактирования/просмотра используется не TextBox, а свой редактор на основе того же PictureBox-a. Исходников у меня сейчас нет. Но делал как-то Hex-редактор на подобном принципе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 14:55 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
JaneDoeХ3.. может через msaccess ? залинковать txt как таблицу БД? а потом отсиквелить её (всмысле БД). Вообще-то Access не волшебник - он использует стандартный провайдер OLEDB или ODBC о которых уже говорилось выше. Так что можно и без него, если умеючи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 14:57 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
да я не спорю... просто Аксес удобная тулза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 15:11 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
JaneDoeда я не спорю... просто Аксес удобная тулза Да, для чайников он удобен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 16:29 |
|
||
|
VB6 - работа с текстовыми файлами
|
|||
|---|---|---|---|
|
#18+
Не для полных чайников - держите пример импорта записей из одного текстового файла с экспортом в другой (я его делал по подобному вопросу в какой-то конференции): Код: plaintext 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. И еще - полезная ссылочка на данную тему: http://msdn2.microsoft.com/en-us/library/ms709353.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 16:40 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32465650&tid=2162568]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 304ms |

| 0 / 0 |
