Загрузить из текстового файла в таблицу значений #122040


#0 by Lobio
Help, plzzzz.... Есть текстовый файл, содержащий текст с разделителями (типа: <Часть1><ЗТ><Часть2><ЗТ><Часть3><ЗТ><Часть4><ЗТ><Часть5><ЗТ><Часть6> и т. д., (ЗТ - ЗнакТабуляции)), в нем около 700000 строк. Все это дело грузится в таблицу значений (ЗТ - типа следующая колонка). Есть код который все это дело загружает:Грузится ОЧЕНЬ долго :( Кто-нить может посоветовать с оптимизацией???
#1 by barlog
ИзСтрокиСРазделителями(<?>)Синтаксис:ИзСтрокиСРазделителями(<Строка>)Назначение:Заполняет СписокЗначений значениями из переданной в качестве параметра строки, содержащей разделенные запятыми значения: числа и строки в двойных кавычках.Параметры:<Строка> - символьная строка, в которой значения разделены запятыми. В качестве значений могут быть числа и строковые значения - они записываются в двойных кавычках.
#2 by Дурочка 1С
Строку надо разбирать на список значений методом ИзСтрокиСРазделителями, предварительно "подготовив" строку.  Мелочь, конечно, но чтоже она у тебя столько раз вычисляет одно и тоже ...  Но имхается мне, что больше всего она тратит время на получение очередной строки текста, так что на особо мощное ускорение, по-моему, расчитывать не стоит ...
#3 by Гурон
что-что ты пишешь Стр=тз.НоваяСтрока ? ты хоть сам(а) понял(а), что ты сказал(а)? ;)
#4 by Lobio
Не, неподходит. В тексте могут содержаться запятые, точки и т.д., неиспользуется тока табуляция.
#5 by barlog
СтрЗаменить(<?>,,)Синтаксис:СтрЗаменить(<СтрИсточник>,<СтрПодстрока>,<СтрЗамены>)Назначение:Возвращает строку, полученную из строки поиска заменой всех вхождений шаблона поиска строкой замены.Параметры:<СтрИсточник> - строка в которой ищем (место поиска);<СтрПодстрока> - строка которую ищем (шаблон поиска);<СтрЗамены> - строка, которой заменяем найденную подстроку (строка замены).
#6 by Гурон
думаю, что такой объём данных быстрее будет обработать в сях. полчаса программирования, пять минут перекура, пока текст лопатится - готовая дбфка, и уже в 1с заливай в ТЗ и крути, как надо...
#7 by Frog
Если ты выгружаешь из одно базы ТЗ в другую, тогда лучше использовать
#8 by Lobio
Это получится, что замениются все символы, которые нужно заменять и которые ненужно заменять. А текст грузится из файла!!!!А Синтаксис-Пощник можешь не переписывать :) :) :)
#9 by Дурочка 1С
Должен ли умный знать то, что знает каждый дурак?
#10 by Дурочка 1С
Это наверняка будет быстрее, чем у тебя ...
#11 by Lobio
В сях конечно проще, но... Смысл всего этого заключается в следующем: есть ТиС, от туда юзер запускает обработку, который формирует исходный файл с данными, потом обработкой крузит в самописную базу данные из этого файла. Мне проще объяснить юзеру, что обработку1 запускаем в ТиСе, обработку2 запускаем в самописной базе, указывает файл с данными и щемит пимпочку "Ок". :) :) :)
#12 by barlog
Кавычки в тексте тоже есть?Если нет то такСтрЗаменить(Стр,СимволТабуляции,""";""")
#13 by Lobio
Читай внимательней....
#14 by Дурочка 1С
Читай внимательней....
#15 by Lobio
Есть и """
#16 by Гурон
может, есть смысл переделать обработку выгрузки данных таким образом, чтобы проще было потом их загружать?
#17 by Lobio
Представь строку:01.05.05<Таб>Пимкин А.<Таб>100301<Таб>504 Бук доска; площадь: 1,996кв.м.<Таб>-1<Таб>-18.32<Таб>-16.39Причем - 504 Бук доска; площадь: 1,996кв.м. - дожна упасть в одну ячейку в таблице значений. Если заменить табуляции на ";" тогда строка разобъется на 2 части - это плохо.
#18 by Lobio
При выгрузки данных нужен читабельный формат файла. В екселе никак, да и сохраняется он ОЧЕНЬ долго (почти миллион строк(!!!)). Кроме текстового формата - ничего придумать немогу :(
#19 by Гурон
необязательно ескель. есть и внутренний формат 1с - mxl. делал обмен через него, формат читабельный (правда, только тем же 1с:)), но честно - не пробовал на таких объёмах, возможно, что и не взлетит.а что мешает в выгрузке формировать нужную по структуре ТЗ и заполнить её текстовыми данными, а затем - ЗначениеВСтрокуВнутр, сохранить результат в текст - чтобы читать можно было, и затем загружать через текст и ЗначениеИзСтрокиВнутр?
#20 by Lobio
MXL будет тормозить ужасно - попробывал, а про структуры ТЗ непонял...
#21 by barlog
ИМХО dbf тебя спасет
#22 by Lobio
Каким образом?
#23 by Гурон
смотри... перед загрузкой ты создаёшь ТЗ с нужным количеством полей и начинаешь её потихоньку заполнять, читая данные из текста. что мешает тебе ПЕРЕД выгрузкой создать такую же ТЗ, заполнить её, как надо, но потом сохранять не текст, как ты его формируешь сейчас, а преобразовать сформированную ТЗ в текст и сохранить результат? вытащить потом этот результат в виде ТЗ оч легко, возможно, что даже и быстрее будет.счас покажу пример кода
#24 by Гурон
#25 by barlog
Кстати, а ведь в ты не прав. Вот код:СЗ=СоздатьОбъект("СписокЗначений");Разбивает ровно на 3 части. Проблемма возникнет только если у тебя в какой-то строке есть сочетание ",", что мне кажется маловероятным.
#26 by barlog
Выгружать сразу в dbf и загружать из него-же. Будет по-любому быстрее чем через текст. Я так понял, что структкра колонок известна и неизменна? Тогда это лучший вариант. Ну или через Олю.
#27 by Lobio
Мало вероятно - это незначит, что такого не может быть. Можь юзер с кривыми руками че-нить и натворит, там запятую или ковычки поставит в названии, потом доказывай, что ты не верблюд. А <Таб>, как ни крутись - не поставит (по-крайне мере у меня не получилось). Структура может меняться в зависимости от данных. Все зависит от того, какие данные юзер хочет получить. Попробывал вариант <ЗначениеИзСтрокиВнутр>, с выгрузкой никаких проблем, но с загрузкой ругается, или я чето неврубаюся: ТЗ=ЗначениеИзСтрокиВнутр(Текст.ПолучитьСтроку) должно сразу все в тз закидывать или как-то построчно или по-правилам?
#28 by Гурон
сразу должно. ну то есть какое-то время на парсинг при ЗначениеИзСтрокиВнутр ядром уходит, конечно:) что именно пишет при загрузке?
#29 by Lobio
тз=ЗначениеИзСтрокиВнутр(Текст.ПолучитьСтроку);{D:BASEANALITEXTFORMSЗАГРУЗКА ДАННЫХ ЗНАЧЕНИЕИЗСТРОКИВНУТР.ERT}: Попытка присвоить значение недоступной для записи переменной (тз)Мод я че не так делаю?{"D","0","0","0","0","0","20050515"},{"D","0","0","0","0","0","20050515"},{"D","0","0","0","0","0","20050515"},{"D","0","0","0","0","0","20050515"},{"D","0","0","0","0","0","20050515"},{"D","0","0","0","0","0","20050515"},  тз=ЗначениеИзСтрокиВнутр(Текст.ПолучитьСтроку);ТЗ уже на форме живет и путая (колонок не имеет).
#30 by Гурон
в том и проблема, что на форме:) создай временную ТЗ в модуле, загрузи сначала в неё, а уже потом выгрузи её в ту, что на форме, чтобы смотреть внутренности.вопрос - а скорость-то как??? ради чего всё затевалось-то?
#31 by Lobio
Делал и так. Только опять же ругается.тз2.Выгрузить(тз);//В ту, которая на формепри выгрузке что-то вроде:{D:BASEANALITEXTFORMSЗАГРУЗКА ДАННЫХ ЗНАЧЕНИЕИЗСТРОКИВНУТР.ERT}: Попытка присвоить значение недоступной для записи переменной (тз)По поводу скорости ничего сказать немогу, т. к. при загрузке в тз и ругается, т. е. в тз не видно данных.Файл получается не с одной строкой, а гораздо больше.И потом, ЗначениеИзСтрокиВнутр применяется в рамках оддной конфигурации, если есть описалово языка - "Описание встроенного языка. Часть 1", стр. 133.
#32 by Гурон
угу, но ведь мы не используем справочники или документы, верно? в ТЗ только строки, так? (это я к вопросу об одной конфигурации)посмотри тщательнее свой код, ты где-то пытаешься присвоить значение той ТЗ, что на форме ТЗНаФорме=чему_то...
#33 by Lobio
Ок. Гляну через 1,5 часа. До работы ддоеду ща :) :) :) :)
#34 by Гурон
елка, да ведь это ж очевидно... и мороки куда как меньше:)))
#35 by Дурочка 1С
Очуметь!
#36 by Lobio
Все данные в текстовом формате. При загрузке больше не ругается, но весь текст грузит в первую колонку, при этом создает все необходимые колонки.
#37 by Гурон
не стебайся:) ты разобрался уже, где собака зарыта с колонками? и как со скоростью, шустрее или нет?
#38 by VZ
"Из ДБФ быстрее"... Если бы еще вспомнить, что ДБФ - это ТЕКСТОВЫЙ файл...
#39 by hedgehog
#40 by Lobio
Все :)Нормально работает :) Всем сенкс за помощь, особено Гурону :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С