Имя: Пароль:
1C
1С v8
Кто как борется с лишними "разделителями" при загрузке из csv-файла?
,
0 palpetrovich
 
24.10.13
16:12
натыкают ТочекСЗапятой в назначении платежа - а ты тут выкручивайся как хочешь... :)
1 Voronve
 
24.10.13
16:13
Файло для выгрузки формируешь ты или кто то другой ?
2 palpetrovich
 
24.10.13
16:17
(1) Кто то другой, вернее другие. Из клинт-банков
3 Voronve
 
24.10.13
16:19
Строку в список значений, парсить с конца списка
4 ДенисЧ
 
24.10.13
16:21
По стандарту csv такие строки должны быть в кавычках...
5 palpetrovich
 
24.10.13
16:26
(3) да ну, зачем?  проще из полученной строки выкусывать последние 2 (16 и 17), остаток - в многострочную...

конец структуры:
15. Кредит
16. Призначення платежу
17. Гривневе покриття


(4) не особенно-то его чтут, стандарт этот
6 Voronve
 
24.10.13
16:37
(5) Т.е. зуб даешь что ручонками более никуда не впихнут ; ?
7 Serginio1
 
24.10.13
16:48
8 palpetrovich
 
24.10.13
16:51
(6) не дам, но во все остальные поля - это уже вредительство :)
(7) почитаю, спасибо
9 smaharbA
 
24.10.13
16:53
шапка есть у него ?
10 1dvd
 
24.10.13
16:53
тут даже человек не сможет разобрать где заканчивается колонка, и где начининается новая
11 Serginio1
 
24.10.13
16:55
12 palpetrovich
 
24.10.13
17:27
в общем - соорудил костыльчик, пока формат файла не поменятся - будет работать, воможность наличия ";" в других полях - даже не рассматриваю :)

    ТЗ = НОВЫЙ ТаблицаЗначений;
    ЗаголовокТаблицы = СтрЗаменить(Текст.ПолучитьСтроку(1),";",Символы.ПС);
    Для Инд = 1 По СтрЧислоСтрок(ЗаголовокТаблицы) Цикл
        ТЗ.Колонки.Добавить("Инд"+Инд ,,СтрПолучитьСтроку(ЗаголовокТаблицы, Инд));
    КонецЦикла;    
    // формат файла:
    //...
    //14. Дебет
    //15. Кредит
    //16. Призначення платежу
    //17. Гривневе покриття
    Для ТекущаяСтрока = 2 По Текст.КоличествоСтрок() Цикл
        НоваяСтрока = ТЗ.Добавить();
        ПолученнаяСтрока = СтрЗаменить(Текст.ПолучитьСтроку(ТекущаяСтрока),";",Символы.ПС);
        ЧислоСтрок = СтрЧислоСтрок(ПолученнаяСтрока);
        НазначениеПлатежа = "";
        Для Инд = 1 По ЧислоСтрок Цикл
            ТекСтрока = СтрПолучитьСтроку(ПолученнаяСтрока, Инд);
            Если (Инд < 16) ИЛИ (ЧислоСтрок = 17) Тогда  
                НоваяСтрока[Инд-1] = ТекСтрока;
            ИначеЕсли (Инд < ЧислоСтрок) И (ЧислоСтрок > 17) Тогда
                НазначениеПлатежа = НазначениеПлатежа + ТекСтрока;
            ИначеЕсли Инд = ЧислоСтрок Тогда    
                НоваяСтрока[15] = НазначениеПлатежа;
                НоваяСтрока[16] = ТекСтрока;
            КонецЕсли;
        КонецЦикла;    
    КонецЦикла;
13 smaharbA
 
24.10.13
17:33
т.е. заголовок присутствует ?
14 Rebelx
 
24.10.13
17:43
(0) типа строка в которой есть разделители не в кавычках?
15 palpetrovich
 
24.10.13
21:12
(13) т.е. заголовок присутствует!
(14) может быть в кавычках, может быть не в кавычках ...люди :)
16 Serginio1
 
25.10.13
10:16
(15) Разберись с форматом CSV wiki:CSV
17 Serginio1
 
25.10.13
10:17
18 palpetrovich
 
25.10.13
12:46
(16) хва удже продвигать свое мегагениальное решение, мне совершенно не нужна унивесальность! Проблемку, охвученную в (0), код из (12) прекрасно решает и так
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.