Имя: Пароль:
1C
 
Избавиться от ковычек при загрузке с текстового файла
0 falselight
 
07.05.19
12:39
Если открыть файл, то там такие значения

"Гр.","00000010","Клиенты","","","","","","","","","",""

При обработке в коде они идут в двойных кавычках.
Как мне получить значения в одинарных кавычках?



    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ИмяФайлаЗагрузкиКонтрагентов);
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
        Строка        = Текст.ПолучитьСтроку(НомерСтроки);
        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка, Разделитель);
        Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл
            ТекущееЗначение = МассивКолонок[НомерКолонки-1];
            Если ТекущееЗначение = "Гр." Тогда
                //



Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
1 falselight
 
07.05.19
12:40
(0+) По коду всегда будет, -

ТекущееЗначение = ""Гр."" - и не будет равно!!!!!
2 dezss
 
07.05.19
12:42
СтрЗаменить
3 Fish
 
07.05.19
12:42
(1) "ТекущееЗначение = ""Гр."" - и не будет равно!" - Что означает сия фраза?
4 dezss
 
07.05.19
12:43
И вообще, зачем изобретать велосипед, если есть СтрРазделить?
5 falselight
 
07.05.19
12:44
(3) Отладчиком встаю на

            Если ТекущееЗначение = "Гр." Тогда


ТекущееЗначение = ""Гр.""

то есть лишние кавычки!!!!!

Не пойму что не так делаю!
6 Вафель
 
07.05.19
12:46
а вот в 77 был метод
7 Fish
 
07.05.19
12:46
(5) Строковые значения в отладчике всегда отображаются в кавычках.
8 Вафель
 
07.05.19
12:47
гугли csv
9 dezss
 
07.05.19
12:47
(5) Да что ж такое.
Строка        = СтрЗаменить(Текст.ПолучитьСтроку(НомерСтроки),"""","");
10 Вафель
 
07.05.19
12:48
тут самое интересное, что внутри строк могут быть запятые и кавычки
11 1Сергей
 
07.05.19
12:49
ЗначениеИзСтрокиВнутр не предлагали ещё?
12 dezss
 
07.05.19
12:49
(10) В теме про "Избавиться от ковычек". Про то, что они могут быть внутри строк нет ни слова.
13 falselight
 
07.05.19
13:30
(6) Это выгрузка с 7.7 ?
(7) Там идет значение в двойных кавычках, и равенство не выполняется

Если ТекущееЗначение = "Гр." Тогда

(8) Я делал так давно, сейчас хочу сделать загрузку с файла

"Эл.","9998","ИП Зайцев Илья Иванович","ИП Зайцев Юрий Вячеславович","Основной договор","","","","","","","БН","1399"


(9) А так правильно будет?

(10) Да это точно!

(11) Буду пробовать.

(12) Ну так от куда знать. Что там навбивали. Выгрузка из 1с 7.7, справочников.
14 Garykom
 
гуру
07.05.19
13:33
Вместо Разделитель = ","
Сделай Разделитель = ""","""
15 falselight
 
07.05.19
13:34
(14) Буду пробовать разные варианты. Пока сам не понял в чем дело.
Из семерки выгрузил как обычно.
Но вот при загрузке что то не идет.
16 HawkEye
 
07.05.19
13:38
(15) возвращайся на 7-ку )
17 НЕА123
 
07.05.19
14:15
автор где-то врет.
я за (7).
18 Garykom
 
гуру
07.05.19
14:26
(17) Он не врет, он просто не понимает.
19 falselight
 
07.05.19
15:21
20 d4rkmesa
 
07.05.19
15:25
(0)

// Функция формирует список значений из строки с разделителями.
//
// Параметры
//  СтрокаТекста - строка текста с разделителями
//  Разделитель - Строка, разделитель в тексте
//  НаличиеКавычек - Булево, есть ли кавычки вокруг значений в строке
//
// Возвращаемое значение:
//   СписокЗначений
//
Функция ИзСтрокиСРазделителями(СтрокаТекста, Разделитель, НаличиеКавычек, ТекстСТабуляциями = Ложь) Экспорт

    Если ТекстСТабуляциями Тогда
        НаличиеКавычек = Ложь;
        Разделитель = Символы.Таб;
    КонецЕсли;
    
    СписокДанных = Новый СписокЗначений;
    
    ПрошлыйРазделитель = 0;
    КоличествоСимволов = 0;

    Для а=1 По СтрДлина(СтрокаТекста) Цикл
    
        Если Сред(СтрокаТекста,а,1) = Разделитель Тогда
        
            ВыбранноеЗначение = Сред(СтрокаТекста,(ПрошлыйРазделитель + 1),КоличествоСимволов);
            Если НаличиеКавычек Тогда
                ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2, (СтрДлина(ВыбранноеЗначение) - 2));
            КонецЕсли;
            Если ТекстСТабуляциями Тогда
                ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, (""""""), """");
                Если Сред(ВыбранноеЗначение, 1, 1) = """" Тогда
                    ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2);
                КонецЕсли;
                Если Сред(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение), 1) = """" Тогда
                    ВыбранноеЗначение = Сред(ВыбранноеЗначение, 1, (СтрДлина(ВыбранноеЗначение) - 1));
                КонецЕсли;
            КонецЕсли;
            СписокДанных.Добавить(ВыбранноеЗначение);
            ПрошлыйРазделитель = а;
            КоличествоСимволов = 0;
            Продолжить;
        
        КонецЕсли;

        КоличествоСимволов = КоличествоСимволов + 1;
    
    КонецЦикла;

    ВыбранноеЗначение = Сред(СтрокаТекста,(ПрошлыйРазделитель + 1));
    Если НаличиеКавычек Тогда
        ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2, (СтрДлина(ВыбранноеЗначение) - 2));
    КонецЕсли;
    Если ТекстСТабуляциями Тогда
        ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, (""""""), """");
        Если Сред(ВыбранноеЗначение, 1, 1) = """" Тогда
            ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2);
        КонецЕсли;
        Если Сред(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение), 1) = """" Тогда
            ВыбранноеЗначение = Сред(ВыбранноеЗначение, 1, (СтрДлина(ВыбранноеЗначение) - 1));
        КонецЕсли;
    КонецЕсли;
    СписокДанных.Добавить(ВыбранноеЗначение);    

    Возврат СписокДанных;
КонецФункции
21 hhhh
 
07.05.19
16:24
(19) ну так пробуй

Если ТекущееЗначение = """Гр.""" Тогда
22 falselight
 
07.05.19
18:30
(21) То есть проверять на тройные кавычки по бокам?
Так воспринимает.
А это будет ли правильно?
23 Garykom
 
гуру
07.05.19
19:27
(22) Поучиться бы вам батенька. Хотя бы про экранирование символов в строке узнать.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн