|
Снова CSV. Как ускорить OLE? | ☑ | ||
---|---|---|---|---|
0
Diamond905
16.06.14
✎
11:45
|
// задаем кодировку
charset = "windows-1251"; //charset = "utf-8"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = "" + "Driver={Microsoft Text Driver (*.txt; *.csv)};" + "DriverId=27;" + "charset=" + charset + ";" + "DefaultDir=" + Папка + ";" + "Extensions=csv;" + "HDR=NO;" + "IMEX=1;" ; Connection.open(); sql = "SELECT * FROM " + ИмяФайла; Попытка adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; objRec = Connection.Execute(sql,adOpenStatic, adLockOptimistic, adCmdText); Исключение //ОбработатьОшибки(Connection.Execute) Для каждого ADOErr из Connection.Errors Цикл err = "*** Execute() ERROR:" + Символы.ВК + sql + Символы.ВК + "Ошибка: " + ADOErr.Number + Символы.ВК + " : " + ADOErr.Description + Символы.ВК + " : " + ADOErr.Source + Символы.ВК + " : " + ADOErr.SQLState + Символы.ВК + " : " + ADOErr.NativeError + Символы.ВК ; сообщить(err,СтатусСообщения.ОченьВажное); Возврат -1; КонецЦикла; КонецПопытки; ТипКолонки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(200)); ТаблЗнач = Новый ТаблицаЗначений; Первый = Истина; Пока Не objRec.EOF Цикл Если Первый Тогда Для i=0 По objRec.Fields.Count-1 Цикл ТаблЗнач.Колонки.Добавить(Строка(objRec.Fields(i).Value),ТипКолонки); КонецЦикла; objRec.MoveNext(); Первый = Ложь; Иначе НовСтр = ТаблЗнач.Добавить(); Для i=0 По objRec.Fields.Count-1 Цикл НовСтр[i] = Строка(objRec.Fields(i).Value); КонецЦикла; objRec.MoveNext(); КонецЕсли; КонецЦикла; objRec.Close(); Возврат ТаблЗнач; На 10000 строк получается 12-13 секунд. Нужно быстрее. Что то мне подсказывает что Строка(objRec.Fields(i).Value); - неоптимально. Наверняка можно както сразу строками хапать, или всю таблицу. Как это сделать или где почитать про сей вопрос? |
|||
1
МихаилМ
16.06.14
✎
11:48
|
||||
2
butterbean
16.06.14
✎
11:48
|
попробуй сам файл разбирать, там ведь просто текст
|
|||
3
ЗлобнийМальчик
16.06.14
✎
11:49
|
(2) присоединяюсь
|
|||
4
Diamond905
16.06.14
✎
12:15
|
Быстрее не стало..
Попытка adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; objRec = Connection.Execute(sql); arr = objRec.GetRows(); objRec.Close(); МассивСтрок = arr.Unload(); ОбщееКоличествоСтрок = МассивСтрок.Количество(); Исключение //ОбработатьОшибки(Connection.Execute) Для каждого ADOErr из Connection.Errors Цикл err = "*** Execute() ERROR:" + Символы.ВК + sql + Символы.ВК + "Ошибка: " + ADOErr.Number + Символы.ВК + " : " + ADOErr.Description + Символы.ВК + " : " + ADOErr.Source + Символы.ВК + " : " + ADOErr.SQLState + Символы.ВК + " : " + ADOErr.NativeError + Символы.ВК ; сообщить(err,СтатусСообщения.ОченьВажное); Возврат -1; КонецЦикла; КонецПопытки; ТипКолонки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(200)); Первый = Истина; ТЗ = Новый ТаблицаЗначений; МассивИменКолонок = Новый Массив; Для Каждого Значение Из МассивСтрок[0] Цикл ТЗ.Колонки.Добавить(Значение,ТипКолонки); МассивИменКолонок.Добавить(Значение); КонецЦикла; Для Инд = 1 По ОбщееКоличествоСтрок-1 Цикл НовСтр = ТЗ.Добавить(); НомерКолонки = 0; Для Каждого Значение из МассивСтрок[Инд] Цикл НовСтр[НомерКолонки] = Значение; НомерКолонки = НомерКолонки + 1; КонецЦикла; КонецЦикла; |
|||
5
Diamond905
16.06.14
✎
12:15
|
(2) Как?
|
|||
6
f_vadim
16.06.14
✎
12:18
|
Обалдели совсем. Текстовые файлы через OLE читать.
|
|||
7
f_vadim
16.06.14
✎
12:22
|
Ещё и через ADO!
|
|||
8
Черный бухгалтер
16.06.14
✎
12:22
|
(0) А помимо .Value там что-нибудь типа .Data или .Text есть?
|
|||
9
dj_serega
16.06.14
✎
12:31
|
(7) Ну так ADO же ОООООЧЕНЬ быстрая штука :)
|
|||
10
vi0
16.06.14
✎
12:31
|
попробуй BULK INSERT в T-SQL
|
|||
11
MikhaDi4
16.06.14
✎
13:57
|
А построчно средствами 1с читать небыстрее будет?
|
|||
12
РенеДекарт
16.06.14
✎
14:05
|
(11)не быстрее
вместо ЧтениеТекста - использовать FileSystemObject. (0) хрень какая-то. Но спасибо за пример чтения текстового файла запросом SQL через виндовый-майкрософтовый ADO. Еще с замерами - цены бы не было. |
|||
13
Serginio1
16.06.14
✎
14:31
|
(0) По моему вручную и то быстрее будет
v8: Преобразование csv в таблицу значений, продолжение |
|||
14
Diamond905
16.06.14
✎
16:12
|
Да оказалось что много уходит на разбор даты-времени, которая приходит в текстовом виде.. будем думать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |