Имя: Пароль:
1C
 
Как "быстро" найти строку в CSV файле?
, ,
0 Dictum
 
14.09.17
21:35
400 000 строк, гружу в таблицу значений, индексирую колонку, использую метод "Найти()", не всегда "находит" (в excel поиск по строке находит, в 1С - нет). В режиме отладки просмотреть ТЗ не выходит, падает 1С. Может порционно как-то работать лучше?
1 zmaximka
 
14.09.17
21:43
запросом
2 Dictum
 
14.09.17
21:45
(1) выходит медленнее. Пробовал
3 RS2017
 
14.09.17
21:46
Если значения уникальные используй соответствие. Значение - ключ, строка - значение.
4 VS-1976
 
14.09.17
22:09
с помощью запроса чрез ADO
5 Йохохо
 
14.09.17
22:24
а как типизированы колонки?
6 mistеr
 
14.09.17
22:33
(0) Найти, а дальше что? Один раз или много?
Задача в целом какая?
7 Tateossian
 
14.09.17
23:29
(0) Во временную таблицу. Примерно так

ВЫБРАТЬ *
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ &ТаблицаЗначений
;
ВЫБРАТЬ * ИЗ ВременнаяТаблица
ГДЕ Поле ПОДОБНО %Строка

///////////////////////////////////////

Всю таблицу типизируй простыми типами.

Собственно, все.
8 Dictum
 
14.09.17
23:33
(6) Найти нужно 4000 000 раз
9 Dictum
 
14.09.17
23:34
(5) Типизированы как строка
10 Dictum
 
14.09.17
23:34
(6) в целом - нужно сопоставить дерево xml к строкам csv
11 Йохохо
 
14.09.17
23:43
(9) строка для сравнения на = или подобно? ВРЕГ
12 Dictum
 
14.09.17
23:45
(11) в запросе использовал "="
13 mistеr
 
14.09.17
23:47
(10) По-моему, лучше проиндексировать дерево XML и сопоставлять в процессе чтения CSV.
14 Dictum
 
14.09.17
23:56
(13) я его не составляю, я получаю два таких файла по АПИ (и не спрашивайте что за хреновое АПИ)
15 Йохохо
 
14.09.17
23:58
если (3) никак, мб попробовать в вт выбирать через выразить как строка 20 и может убрать индексирование, добавить сортировку
16 mistеr
 
15.09.17
00:00
(14) И что?
17 Dictum
 
15.09.17
00:05
(16) давай по подробнее про "проиндексировать дерево xml"
18 mistеr
 
15.09.17
00:31
Ну, использовать ТЗ с индексами или Соответствие. Туда положить ссылки на узлы.
19 Злопчинский
 
15.09.17
01:09
МБ не надо все делать сразу? А искать соответствие только тогда,когда оно становится нужным для дальнейшей работы?
20 Fram
 
15.09.17
01:20
(10) а структура xml позволяет его тоже в таблицу загнать? если да, тогда загоняешь оба набора данных в ТЗ, и оба ТЗ в запрос. и крути верти как хочешь
21 Tateossian
 
15.09.17
01:33
Кстати, насчет вот этого: "Может порционно как-то работать лучше?" В твоей ситуации, пожалуй, это даже самый лучший вариант: делишь на несколько частей (скажем, на 4, и запускаешь поиск в фоновом задании). Или, вот второй способ, трансформируй в бинарное дерево: через соответствие. Скажем, ключ и значение - это по соответствию "половине" и так до определенной (необходимой) глубины вложенности. А в листе (последнем соответствии) - массив искомых строк.
22 VladZ
 
15.09.17
03:51
(8) Зачем так много? Нельзя кэшировать?

Что за инфу грузишь?
23 breezee
 
15.09.17
05:40
В запросе временную таблицу как писали ранее и индексировать по полям которые встречаются достаточно часто одинаковые
24 Dotoshin
 
15.09.17
07:54
(0) Выбери из своей экселевской таблички те строки, которые ТЗ не всегда находит и посмотри отладчиком почему не находит.
Кроме этих строк выбери из таблички несколько предшествующих и несколько последующих. Думаю у тебя какой-то косяк в коде и причина ненахождения может крыться в какой-то конкретной комбинации данных, которая не учтена в твоем алгоритме.
25 1dvd
 
15.09.17
07:55
может имеет смысл завести РС?
26 vadim777
 
15.09.17
08:18
(24) Стандартная причина непоиска в ТЗ - пробелы в начале и конце шаблона для поиска.
27 Dotoshin
 
15.09.17
08:36
(26) Еще в экселе могут быть всякие невидимые символы типа неразрывных пробелов и подобной хрени.