Имя: Пароль:
1C
 
csv 10гб
,
0 tigrandis
 
28.02.22
14:54
всем привет, собственно сабж, файл имеет 150 колонок, и много много строк, средствами 1с файл читает примерно 6-7 часов, есть какой нибудь вариант по шустрее, может библиотека на С или что то похожее,
1 Эльниньо
 
28.02.22
14:55
Да что там такого то?!
2 Asmody
 
28.02.22
14:56
(0) загрузи его в СУБД какую-нибудь. будет легче
3 Garykom
 
гуру
28.02.22
14:57
(0) перегони в dbf
4 H A D G E H O G s
 
28.02.22
14:59
(0) Вы криво читаете его 1С-ом, вот и всё.
5 Casey1984
 
28.02.22
15:04
(0) Для того чтобы проложить в точку Б, нужно знать где точка А, а вы не можете код привести :-/
6 Kassern
 
28.02.22
15:07
интересно, как работать с таким файлом? Если это чисто БД, тогда и переводите в БД, если это какие-то операции для обменов, то бейте на части, грузите кусками, может в несколько потоков.
7 VladZ
 
28.02.22
15:09
(0) Попробуй в Excel открыть.
8 tigrandis
 
28.02.22
15:10
(1) перепись населения Эстонии.
9 VladZ
 
28.02.22
15:11
не получится (7) - грузи в SQL. SQL умеет загружать csv
10 tigrandis
 
28.02.22
15:11
(2) к сожалению нет времени, каждый день приходит новый файл, и нужно сравнивать  их.
11 НЕА123
 
28.02.22
15:14
(10)
может (2) все-таки и есть решение?
12 Kassern
 
28.02.22
15:14
(10) я так понимаю, львиная доля это не чтение файла, а его обработка?
13 tigrandis
 
28.02.22
15:14
(6) сейчас так и происходит, при чтении в цикле покупаем по пакетам и отрабатываем в 50 потоков, но сам цикл при чтении медленный, поэтому хотим читать чем то сторонним.
14 Garykom
 
гуру
28.02.22
15:14
(12) скорее всего обработка
15 Garykom
 
гуру
28.02.22
15:15
(10) выгружать из 1С данные во внешнюю бд, и юзаеть некий внешний софт относительно 1С

ну или просто почитай уже про многопоточность и фоновые
16 tigrandis
 
28.02.22
15:17
(14) именно ЧТЕНИЕ, про многопоточность написал выше
17 Kassern
 
28.02.22
15:17
кусок кода, хотя бы концепт вашего цикла скиньте, все 150 колонок расписывать не надо
18 lodger
 
28.02.22
15:22
(16) ну так отдавай чтение в какой-нибудь комбайн. https://www.sqlshack.com/importing-and-working-with-csv-files-in-sql-server/
19 pechkin
 
28.02.22
15:22
Сам цикл
ЧтениеТекста.ПрочитатьСтроку()
Сколько выполняется?
20 tigrandis
 
28.02.22
15:23
(19) порядка 4-5 часов без обработки
21 Garykom
 
гуру
28.02.22
15:24
(20) Так блин разбей на много потоков то чтение
22 Garykom
 
гуру
28.02.22
15:24
(21)+ Сам файлик поделить на куски перед этим чем то внешним
23 Kassern
 
28.02.22
15:27
(20) Что из этого пробовали? https://infostart.ru/1c/articles/1413866/
24 Kassern
 
28.02.22
15:28
(23) "Для больших файлов нужно использовать Microsoft.Jet.OLEDB, а не построчное чтение средствами платформы. Понимает даты, числа и многострочные поля. Скорость: ~3000 строк в секунду." из той же ссылки
25 Kassern
 
28.02.22
15:28
сколько у вас строк примерно?
26 tigrandis
 
28.02.22
15:30
(24) вот, спасибо, я как раз хочу найти самый эффективный способ, у меня примерно 6млн строк
27 tigrandis
 
28.02.22
15:30
(23) пока нет, тоже посмотрю
28 Kassern
 
28.02.22
15:32
(26) стоило только вбить в яндексе "1с csv чтение" самая первая строчка)
29 tigrandis
 
28.02.22
15:37
(28) только  собираемся оптимизоровать, поэтому тут написал, чтоб не наступать на все грабли одновременно, хотя ситуация у меня не оч  стандартная
30 Asmody
 
28.02.22
15:38
31 НЕА123
 
28.02.22
15:38
ПоляСтроки = СтрРазделить(ЧтениеТекста.ПрочитатьСтроку(входнойфайл), ";", Истина)
32 zptm
 
28.02.22
16:58
Scripting.FileSystemObject
33 Fragster
 
гуру
28.02.22
17:57
так csv нормально через ado читается. ну или внешние источники.
34 ДедМорроз
 
28.02.22
19:42
Во-первых,формат колонок имеет большое значение,т.к.даты,например,быстро не прочитаешь.
35 ДедМорроз
 
28.02.22
19:44
Быстрее Си ничего нет,но на Си нужно уметь записать.
Разгребание csv на Си получается где-то в районе гигабайт в секунду на нормальной машине.
36 ДедМорроз
 
28.02.22
19:46
Это,кстати,с учетом приколов с переводом строки в каввчках - без него быстрее.
Vbscript делает тоже самое где-то гигабайт в минуту.
37 Еврейчик
 
28.02.22
19:47
его же можно разбить на части и почастям считывать. а потом пачкой добавлять записи в бд
38 RomanYS
 
28.02.22
20:05
(20) прогнал 7млн строк по 1500 символов :
Время записи 23 сек
Время чтения 119 сек
Размер файла 14,5 ГБ (15 618 486 907 байт) Кстати почему?

&НаСервере
Процедура Команда1НаСервере()
    
    ИмяФайла = ПолучитьИмяВременногоФайла("txt");
    Сообщить(ИмяФайла);
    
    Строка = "";
    Для инд = 1 По 150 цикл
        Строка = Строка + "01234596789";
    КонецЦикла;
    

    Нач = ТекущаяДата();
    ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
    Для инд = 1 По 7000000 цикл
        ЗаписьТекста.ЗаписатьСтроку(Строка);
    КонецЦикла;
    ЗаписьТекста.Закрыть();
    Сообщить("Время записи " +(ТекущаяДата()-Нач) + " сек");
    
    
    Нач = ТекущаяДата();
    ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла);
    Пока Строка <> Неопределено Цикл
        Строка = ЧтениеТекста.ПрочитатьСтроку();
    КонецЦикла;
    Сообщить("Время чтения " +(ТекущаяДата()-Нач) + " сек");

КонецПроцедуры
39 НЕА123
 
01.03.22
12:31
(38)
не замерял. скорее всего
>Строка = ЧтениеТекста.ПрочитатьСтроку();
(создание объекта типа строка)
40 RomanYS
 
01.03.22
13:04
(39) Не понял вопроса. Куда уходят 2 минуты?
В данном контексте это наверное не важно, 2 минуты это не 4-5 часов из (20)
41 НЕА123
 
01.03.22
13:11
(40)
>В данном контексте это наверное не важно, 2 минуты это не 4-5 часов из (20)
полностью согласен.

в (39) предположение о том куда уходят 2 минуты.
4-5 часов уходят на неоптимальную обработку строк. я так думаю (с)
42 RomanYS
 
01.03.22
13:28
(41) скорее всего, но ТС не сознается. А народ пытается решить проблему медленного чтения 1С, которой по факту нет
43 Chai Nic
 
01.03.22
13:42
У автора может файл по сети открывается?
44 Галахад
 
гуру
01.03.22
13:52
Перепись Эстонии, по определению не должна быстро открываться. :-)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой