|
Чтение больших текстовых файлов (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
|
А что потом делается с этим файлом - не проще ли его сразу в базу читать по строкам - тогда никаких расходов памяти не будет ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |