Имя: Пароль:
1C
 
Чтение больших текстовых файлов (CSV)
,
0 The gray Cardinal
 
29.03.11
11:32
Есть функция, которая зачитывает текстовый CSV файл в ТаблицуЗначений:
http://forum.script-coding.com/viewtopic.php?id=5664
Сама выборка из файла работает очень быстро.
А вот помещение прочитанных строк в ТаблицуЗначений сделано "в лоб" и достаточно хорошо пожирает память.

Можно ли сделать лучше и как?
1 marvak
 
29.03.11
11:34
(0)
Считывать в ТЗ "кусками", как вариант, например по 5000 строк, потом обработка ТЗ, потом очистка ТЗ, потом следующая порция.
2 The gray Cardinal
 
29.03.11
11:55
(1) Да, хороший способ.
Но хочется иметь ТЗ целиком, т.к. по ней удобно искать.

Где-то были какие-то временные таблицы, вроде (в 8.1, потом убрали?). Может, есть способы БЫСТРО загнать все данные в базу (в регистр или справочник какой-нибудь), чтобы потом делать выборки?

А ещё есть нересурсоёмкие хранилища, по которым удобно искать, кроме ТЗ?
3 dimoff
 
29.03.11
12:00
В порядке бреда:
Одно из полей по котиорому будет поиск или первую букву в строковых полях фигачить в объект Структура, а для каждого элемента структуры свою таблицу значений.
4 dimoff
 
29.03.11
12:02
35000 элементов никогда не будут быстро записаны в базу, посему опять таки в порядке бреда:

возможно имеет смысл подумать чтобы файл загружался заранее в каком-нибудь фоновом регл.задании в отдельную базу к которой потом через com.connector например делать запрос
5 dimoff
 
29.03.11
12:03
То есть можно как-то более обще на задачу взглянуть
6 МихаилМ
 
29.03.11
12:03
(0)
попробуйте скд. должо ускориться.
7 The gray Cardinal
 
29.03.11
12:28
(6) А как именно? Можно кратко, по шагам?
8 orefkov
 
29.03.11
12:30
(0)
Раз читаешь через ADO, то GameWithFire.dll тебе в помощь.
9 Defender aka LINN
 
29.03.11
12:31
(6) Хорошая шутка, годная.
10 The gray Cardinal
 
29.03.11
12:31
(3) Наверное, 6 ТЗ по 50 тыс. строк будут вешать комп так же, как одна ТЗ на 300 тыс. строк.
11 orefkov
 
29.03.11
12:34
Нересурсоёмкое хранилище, по которому удобно искать - sqlite.
12 The gray Cardinal
 
29.03.11
12:38
(8) Спасибо, сейчас попробуем...
13 marvak
 
29.03.11
12:51
(0)
Еще вариант. Загнать файл в таблицу Акцесс, а с Акцессом уже работать по COM.
Там и поиск можно замутить.
14 The gray Cardinal
 
29.03.11
13:13
(8) Отлично, спасибо!
Быстрее раз в десять и более, висяков компа почти нет.
15 dimoff
 
29.03.11
13:14
Орефков это голова
16 orefkov
 
29.03.11
13:53
(15)
GameWithFire - это DmitrO, это он голова
17 The gray Cardinal
 
29.03.11
14:10
Добавил по ссылке в (0) краткий пример.
18 orefkov
 
29.03.11
14:36
(14)
Вот вам и сравнение скорости интерпретатора 1С с С++, тк унутре себя gamewithfire делает то же, что и твой код, только перебор сделан на С++, плюс вызываются через COM методы объектов 1С.
19 ado
 
29.03.11
14:41
(11) А что-нибудь подобное 1sqlite для 8-ки есть?
20 The gray Cardinal
 
29.03.11
14:48
(19) Присоединяюсь к вопросу :-)
21 Живой Ископаемый
 
29.03.11
14:53
(19,20) ой....
22 Живой Ископаемый
 
29.03.11
15:00
а, понял
23 orefkov
 
29.03.11
15:07
(19), (20)
Есть COM-врапперы, вполне юзабельные в 1С 8.2
Использовал dhRichClient (http://www.thecommon.net/2.html, вполне нормально)
А так http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers - там смотрите COM Wrappers
24 The gray Cardinal
 
29.03.11
15:40
(23) Спасибо, попробуем...
25 Torquader
 
29.03.11
20:08
А что потом делается с этим файлом - не проще ли его сразу в базу читать по строкам - тогда никаких расходов памяти не будет ?
Основная теорема систематики: Новые системы плодят новые проблемы.