|   |   | 
| 
 | Сложная ситуация с пробельными символами в 1С. | ☑ | ||
|---|---|---|---|---|
| 0
    
        maker1992 09.02.18✎ 13:07 | 
        Здравствуйте.
 Платформа 1С 8.3. Есть код, считывающий данные из Excel-файла. В ячейке экселя данные - 67104848 (Числовой формат: общий). Код в 1С: СокрЛП(ОкноЕксел.Cells(Й, 2).Value)); Выдает результат: 67 104 848. Но пробелы здесь не являются пробелами. Я сохранил эту строку в блокнот, открыл ХЕКС редактором - этот пробел имеет код а0 - LF - перенос строки. Мне нужно убрать пробелы, как быть? | |||
| 1
    
        Малыш Джон 09.02.18✎ 13:08 | 
        СтрЗаменить     | |||
| 2
    
        Базис naïve 09.02.18✎ 13:08 | 
        НБСП или Симв(160) заменяй на "".     | |||
| 3
    
        Lexey_ 09.02.18✎ 13:10 | 
        (0) зачем ХЕКС редактором, есть же КодСимвола()?     | |||
| 4
    
        Rema Dan 09.02.18✎ 13:10 | 
        (0) СокрЛП(Формат(ОкноЕксел.Cells(Й, 2).Value, "ЧН=; ЧГ="));     | |||
| 5
    
        Ненавижу 1С гуру 09.02.18✎ 13:10 | 
        Формат(ОкноЕксел.Cells(Й, 2).Value, "ЧГ=0")     | |||
| 6
    
        бомболюк 09.02.18✎ 13:10 | 
        перенос строки - это 0x0a     | |||
| 7
    
        maker1992 09.02.18✎ 13:12 | 
        Сработало:
 СтрЗаменить(СокрЛП(ОкноЕксел.Cells(Й, 2).Value), Символы.НПП, "") | |||
| 8
    
        Fram 09.02.18✎ 13:13 | 
        (4) СокрЛП это контрольный в голову?     | |||
| 9
    
        Ненавижу 1С гуру 09.02.18✎ 13:14 | 
        (0) особенно порадовала функция СокрЛП, примененная к числу     | |||
| 10
    
        Rema Dan 09.02.18✎ 13:17 | 
        (8) Вполне возможно, что этот же код применяется не только для строчек с числами, но и обычных строчек. Если убрать СокрЛП, то изменится разбор таких строчек.     | |||
| 11
    
        maker1992 09.02.18✎ 13:17 | 
        (8) Дак она сама приводит число к строке     | |||
| 12
    
        mehfk 09.02.18✎ 13:18 | 
        (9) Если трудностей нет, их нужно создать, а потом мужественно преодолеть.     | |||
| 13
    
        Скиурус 09.02.18✎ 13:26 | 
        ОкноЕксел.Cells(Й, 2).Value может приводиться к разным типам (формат ячейки Экселя никак на это свойство не влияет, формат влияет только на отображение в самом Экселе). Это механизм маршаллинга, заложенный в платформе COM, от 1С он никак не зависит. Обычно значения ячеек Экселя приводятся к строке, но могут и к числу. На это может влиять то, что записано в этом столбце в нескольких верхних ячейках.
 В данном случае, кстати, значение привелось именно к числу, что мы увидим дальше. Функция СокрЛП всегда возращает строку, она приводит свой аргумент к строке (такое преобразование в языке 1С определено для любого типа данных). При этом число к строке приводится с учетом разделителя разрядов. В 1С для этого используется символ неразрывного пробела, который отбивает группы по 3 цифры, что ты и наблюдаешь. Если нужно получить строковое представление числа, то в 1С есть функция формат(). Ее использовать логически правильнее, чем СтрЗаменить Символы.НПП. Перед отображением чего-либо нестрокового пользователю в 1С обычно используют формат, в котором задают настройки и для числа и для даты и для булевых переменных. К чему я эту простыню накатал? А х.з., наверное для того, чтобы показать, что в 1С ситуация с пробельными символами вполне нормальная. Примерно такая же, как во всей Вселенной. | |||
| 14
    
        maker1992 09.02.18✎ 13:28 | 
        (13) Понял. Спасибо.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |