| 
    
        
     
     | 
    
  | 
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 
 | 
         
        Перепись Эстонии, по определению не должна быстро открываться. :-)     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |