|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Здравствуйте! С Рождеством! Уважаемые знатоки, нужна ваша помощь. Хотя бы подтолкнуть в нужном направлении или просто даже советом. К сожалению, ничего подходящего по Форуму не нашёл. Может, плохо искал, а может, и ничего в найденном не понял (прошу тогда прощения). Проблема/задача такая. Имеется вордовский документ, в котором находится таблица. По сути же, таблицей её можно назвать только чисто "визуально": строки, столбцы и значения ячеек сформированы расстановкой пробелов. Примерно так: 1...Он......Там,Сям 2...Она.....Везде,Нигде …............Где-то 3...Оно....Там,Сям ...............Везде,Нигде ...............Никому,Никогда То есть, здесь три столбца и три строки - 9 ячеек (извиняюсь за жаргон :-) ); в конце каждой строчки, соответственно, - энтер. Так вот: необходимо ПРОГРАММНО корректно преобразовать этот текст в текст с разделителями для последующего импорта в БД. 1. Задача минимум: обработатывать нужный фрагмент текста VBA-кодом; для этого нужный кусок можно на худой конец скопипэйстить из файла и вручную. 2. Задача максимум: программно открывать файл, считывать из нужного места до нужного места и программно преобразовывать его в таблицу в текстовом формате с разделителями полей. Потыкался было с импортом-экспортом – нет света в тонелле; попробовал риплэйсить поэтапно пробелы (группы пробелов) – с тем же успехом. Задача, знаю точно, решаема. По ссылкам ниже (сами файлы объёмные) можно обнаружить как раз оба варианта: один в исходном формате, второй - в виде похожей на правду таблицы (в принципе пригодной для импорта, правда, с предварит программной обработкой). Интересно, что из чего сделано. Два варианта: либо второй (табличный) файл из первого, либо наоборот: изначально исходный формат именно табличный, а тот, что нужен сейчас, - производный от него. Но это без разницы: если знать "как туда" - значит знать, как и "в обратную сторону". (Хотя, может быть, я перегибаю со сложностью. По невежеству... :-))) ) Сразу отвечю, почему не устраивает второй, уже сделанный кем-то, табличный, вариант. Причин, как минимум, две: - это официальный нормативный документ, а найти его в виде таблицы на ресурсе, заслуживающем доверия (ну или похожего на это), я лично не смог; - на госуд сайтах табличный файл либо разбит на неск частей («томов», не знаю, откуда взяли этот термин), либо вообще он урезан (!) в неск раз. Требуемый текстовый вариант можно скачать отсюда («Общероссийский классификатор территорий муниципальных образований» - ОКТМО): http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=113284;fld=134;dst=100003 Табличный, - например, здесь: http://chita.gks.ru/method/classifier/%D0%9E%D0%9A%D0%A2%D0%9C%D0%9E.aspx, здесь: http://chita.gks.ru/method/classifier/%D0%9E%D0%9A%D0%A2%D0%9C%D0%9E.aspx или здесь: http://www.kalugastat.ru/method/classifier/ОКТМО.aspx Спасибо всем, кто откликнулся! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2012, 15:52 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Ну а зачем именно ПРОГРАММНО? Эксель прекрасно прожёвывает и парзит CSV/TSV-файлы. Ещё лучше это делает Ацесс - присоединяете (либо импортируете) такой текстовый файл как таблицу, и работаете с уже распарзенными полями. К тому-же там уже есть готовые средства для коннекции/экспорта в любые серьёзные БД (т.е. Ацесс можно использовать как транзитный конвертор-загрузчик). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2012, 21:06 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Павел, спасибо, что откликнулись (что хоть осталась ещё живая душа... :-) ) Pavel Berezin...Эксель прекрасно прожёвывает и парзит CSV/TSV-файлы. Ещё лучше это делает Ацесс - присоединяете (либо импортируете) такой текстовый файл как таблицу, и работаете с уже распарзенными полями. К тому-же там уже есть готовые средства для коннекции/экспорта в любые серьёзные БД (т.е. Ацесс можно использовать как транзитный конвертор-загрузчик). EvAnd...Потыкался было с импортом-экспортом – нет света в тонелле; попробовал риплэйсить [как раз в Аксессе... :-)] поэтапно пробелы (группы пробелов)... Pavel BerezinНу а зачем именно ПРОГРАММНО? Речь идёт о регулярном - и актуальном! - обновлении информации (в БД) на (каждом!) ПК... Лично я не в силах ни заставить, ни научить, ни объяснить: каждому, любому, другому... - как это, видите ли, элементарно делается "пользовательскими средствами": "мозгами" и "образованием"... Специфика же такая :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2012, 22:00 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Если речь идёт именно о конвертации ОКТМО - то не вижу проблемы. В твоей "чисто визуально таблице" всё готово для ТРИВИАЛЬНОГО импорта в БД. С фиксированной шириной полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2012, 22:10 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
AkinaЕсли речь идёт именно о конвертации ОКТМО - то не вижу проблемы. В твоей "чисто визуально таблице" всё готово для ТРИВИАЛЬНОГО импорта в БД. С фиксированной шириной полей. И как вы в подробностях предлагаете?... (Давно над этим бьюсь...) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2012, 22:35 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
EvAndAkinaЕсли речь идёт именно о конвертации ОКТМО - то не вижу проблемы. В твоей "чисто визуально таблице" всё готово для ТРИВИАЛЬНОГО импорта в БД. С фиксированной шириной полей. И как вы в подробностях предлагаете?... (Давно над этим бьюсь...)Есть такая функция MID()... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 07:42 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
AkinaЕсли речь идёт именно о конвертации ОКТМО - то не вижу проблемы. В твоей "чисто визуально таблице" всё готово для ТРИВИАЛЬНОГО импорта в БД. С фиксированной шириной полей. +1 импортировать, "как есть", во времянку а потом "пройтись" по рекордсету этой времянки, формируя запись уже в "людском" виде и сохраняя её в постаянную табл. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 10:14 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
EvAnd, вот здесь можно скачать вордовский файл ОКТМО http://www.gks.ru/metod/classifiers.html перекиньте таблицу в ексель и делайте с ней что вашей душе угодно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 10:56 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Pavel BerezinНу а зачем именно ПРОГРАММНО? Эксель прекрасно прожёвывает и парзит CSV/TSV-файлы. Ещё лучше это делает Ацесс - присоединяете (либо импортируете) такой текстовый файл как таблицу, и работаете с уже распарзенными полями. К тому-же там уже есть готовые средства для коннекции/экспорта в любые серьёзные БД (т.е. Ацесс можно использовать как транзитный конвертор-загрузчик). Собственно Access дает лишь интерфейс, а все выполняется с помощью ADODB. Примерчик на данную тему (я его уже тут приводил): Код: 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.
Ну и можно еще тут посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 13:51 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
AndrFСобственно Access дает лишь интерфейс, а все выполняется с помощью ADODB. Примерчик на данную тему ... AndrF, спасибо за отзыв, здравстуйте! Файл sFileIn создаётся. Вот на этой строке слетает на ошибку: Код: vbnet 1.
При этом файл schema.ini тоже создаётся. Вот его текст: [File.txt] ColNameHeader=False CharacterSet=1251 Format=Delimited(,) DecimalSymbol=. Col1=F1 Integer Col2=F2 Integer Col3=F3 Float Col4=F4 Integer [NewFile.txt] ColNameHeader=False CharacterSet=1251 Format=Delimited(,) DecimalSymbol=. NumberDigits=4 Col1=F1 Integer Col2=F2 Integer Col3=F3 Float Col4=F4 Integer Обратите ещё внимание! Я изменил 2 строки (добавил черту в названии пути). Здесь: Код: vbnet 1. 2. 3. 4.
и здесь: Код: vbnet 1. 2.
(без этого тоже возникали ошибки) А что дожно получиться в итоге? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 21:51 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
Ну так текст ошибки вроде даже по-русски вам рассказал, в чем проблема А именно в Format=Delimited(,)поскольку у вас, наверняка, системный разделитель целой и дробной части - такой же. Тут решения два - либо менять системный разделитель на ".", либо разделитель полей в файле на другой (например, ; или табулятор). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 22:24 |
|
Преобразовать обычный текст в табличный с разделителями
|
|||
---|---|---|---|
#18+
AndreTMНу так текст ошибки вроде даже по-русски вам рассказал, в чем проблема А именно в Format=Delimited(,)поскольку у вас, наверняка, системный разделитель целой и дробной части - такой же. Тут решения два - либо менять системный разделитель на ".", либо разделитель полей в файле на другой (например, ; или табулятор). Что такое разделитель, я знаю. Знаю, где изменить его значение... Я ещё сути не понял, что творю 1. Что делает эта процедура? 2. Что должно получится в итоге? Спасибо :-) (Поменял в процедуре на ";" - тоже самое ) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2012, 23:47 |
|
|
start [/forum/topic.php?fid=60&fpage=88&tid=2158163]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 324ms |
total: | 458ms |
0 / 0 |