Имя: Пароль:
1C
1С v8
Чтение CSV (Платформа 8.3)
,
0 V67070
 
29.05.18
18:05
Добрый день.
Подскажите, как ускорить чтение текстового файла в клиент-серверном режиме.
Если БД файловая, то чтение относительно быстро.
Если Клиент-Сервер то утомительно долго.

&НаКлиенте
Процедура РазобратьCSV()
    Текст = Новый ЧтениеТекста(ФайлCSV, КодировкаТекста.ANSI);
    Для СтрокаCSV = 1 По КоличествоСтрок Цикл
        ...
        Строка = Текст.ПрочитатьСтроку();
        ...
        КонецЦикла
КонецПроцедуры.

Вот это работает утомительно долго.
Можно в не файловом режиме, сделать побыстрее?

С Уважением.
1 Вафель
 
29.05.18
18:05
оледб
2 RomanYS
 
29.05.18
18:10
(0) Расшифруйте, пожалуйста, "утомительно долго". Размер файла, число строк, время чтения
3 V67070
 
29.05.18
18:13
5мб, 29 тыс строк, больше часа.
4 Вафель
 
29.05.18
18:14
случайно не по сети файл читаешь?
5 RomanYS
 
29.05.18
18:14
(3) Нереально. Замеры 1С подтверждают, что тормозит именно эта строка?
6 Вафель
 
29.05.18
18:14
может дело не в чтении, а в создании элементов?
как рзбиваешь строку на поля?
7 craxx
 
29.05.18
18:14
(4) подозреваю что каждый раз дергает сервер
8 RomanYS
 
29.05.18
18:15
(4) даже по модему быстрее будет)
9 RomanYS
 
29.05.18
18:15
(7) вот это более вероятно
10 RomanYS
 
29.05.18
18:17
(9) перечитал (0), там 100% (7). Показывай весь код
11 V67070
 
29.05.18
18:22
(6) обычная процедура из типовых.
разложить..вмассив

замеры сделаю, поглядеть на чем тормозит.

код простейший,преобразовать строки к нужному типу и запись в таблицу значений для дальнейшей обработки.

из екселя за пару минут читает, но ексель ставить не хотят, приходится с текстом возиться.
12 craxx
 
29.05.18
18:23
(11) передай файл на сервер и там обрабатывай
либо в массив структур, который потом на сервер и в тз
13 RomanYS
 
29.05.18
18:24
(11) у тебя в цикле вызов сервера и это ппц.
Или избавляйся от него, или переноси весь цикл сервер (возможно вместе с файлом)
14 V67070
 
29.05.18
18:29
так и сделаю.
15 Franchiser
 
гуру
29.05.18
18:29
(11) тормозит не на чтении, а на чем то другом, например, типизации. Кешируй ссылки.
16 craxx
 
29.05.18
18:33
(15) тормозит на вызове сервера
17 Franchiser
 
гуру
29.05.18
18:38
(16) понятно, какого .... ты читаешь на клиенте... Передавай на сервер файл и далее из временного читай
18 V67070
 
30.05.18
06:52
Передал на сервер, всё получилось, быстро читает/обрабатывает.

еще вопросик можно?

Как сделать на сервере какую нибудь индикацию выполнения загрузки файла/обработки строк.

Если гонять оповещения с клиента/на сервер о процессе обработки,опять замедление будет, есть какие нибудь методы индикацию на сервере сделать?

С Уважением.
19 Cool_Profi
 
30.05.18
06:56
(18) Кому ты на сервере показывать состояние собираешься?
20 MiralievRustam
 
30.05.18
07:37
Процедура РазобратьCSV()
    Текст = Новый ЧтениеТекста(ФайлCSV, КодировкаТекста.ANSI);
СтрокаCSV = "";
    Пока СтрокаCSV <> Неопределено Цикл
        ...
        Строка = Текст.ПрочитатьСтроку();
        ...
        КонецЦикла
Думаю так лучше

Нафига читать сперва КолВо строк а потом
Еще и прочитать строку? когда можно обойтись одним
21 MiralievRustam
 
30.05.18
08:06
+(20) ну а вообще более подробнее напишите размер файла, где лежит файл
22 Сияющий в темноте
 
30.05.18
09:30
Пока серверный код работает,клиент ждет от него ответа,чтобы отпустить клиента,чтение можно засунуть в фоновое задание,тогда периодически можно сохранять статус в базу,а клиентом заходить и брать этот статус,но тогда,покп клиент за статусом не сходит,он не узнает,что файл прочитали.
23 бомболюк
 
30.05.18
09:36
(1) +1
способы типа (20) не годятся, так как может присутствовать закавыченная строка с разделителем строк внутри.
24 MiralievRustam
 
30.05.18
20:58
(23) так поэтому я и спрашиваю что в файле каков размер файла
25 Fram
 
30.05.18
21:12
(24) тему поперек что ли читаешь. первое предложение в (18) прочитай
26 MiralievRustam
 
30.05.18
21:31
(25) )))