Имя: Пароль:
1C
1C 7.7
v7: Не работает СокрЛП()
0 Sayan_mi
 
17.05.17
05:13
Народ почему то не работают функции обрезки пробелов (все).
Написать свою тоже что-то не получается, получить доступ к символу строки по позиции не могу, строка[н] не работает - ругается что строка не массив.
Не подскажите ли как быть?
1 vcv
 
17.05.17
05:27
Функции обрезки пробелов работают. У вас скорее всего проблема в том, что вы результат СокрЛП помещаете в реквизит - типизированную переменную, строку фиксированной длины.

Получить доступ к символу по позиции можно с помощью Сред(Строка,н,1)
2 vcv
 
17.05.17
05:29
(мысли вслух) Всё же начинать изучать программирование с языка со слабой динамической типизацией - зло.
3 VladZ
 
17.05.17
05:35
(0) У меня все работает.
4 Sayan_mi
 
17.05.17
06:26
Спасибо за подсказку.
А начинал программировать я на Паскале там и объявлением с типами жестко.
5 Sayan_mi
 
17.05.17
07:12
Не работает однако!!!!
Вот код (усложнил для проверки)
   Зн = "";
   нЗн = "";
   Зн = НашЛист.Cells(i,1).Value;
   нЗн = СокрЛП(Зн);
Так вот все начальные и конечные пробелы у Зн и нЗн совпадают :-(
6 KishMish
 
17.05.17
07:38
(5) есть такое понятие как "неразрывные пробелы".СокрЛП работает только с обычными пробелами. Возможно дело в этом.
Ты можешь скопипастить значение из ячейки екселя сюда, в собщение на форуме? Помести его в скобки. Типа
(  вот значение первой ячейки с пробелами     )
7 2S
 
17.05.17
07:48
Попробуй не value, a text
8 mishaPH
 
модератор
17.05.17
07:58
сколько с екселем работаю из 1с. никогда с таким не сталкивался.
9 Масянька
 
17.05.17
07:58
(5) Всё работает:
            СпрНоменклатура.ПолнНаименование    = СокрЛП(Строка(Лист.Cells(НомерСтроки, 3).Value));

Значит, у тебя не строка.
10 HawkEye
 
17.05.17
08:00
(5) работает однако!

может руки надо помыть? (с)
11 2S
 
17.05.17
08:02
(10) в качестве значения ячейки текст?
12 mishaPH
 
модератор
17.05.17
08:13
(9) сокрЛП не требует Строка() оно само преобразует
13 Sayan_mi
 
17.05.17
09:12
Не помогает не строка() не .text
Вот пример ячеек:
  WMV4270GB/01       
  WMV4270SK/01  
14 Sayan_mi
 
17.05.17
09:13
Попробую обработать строку сам через Сред()
15 Ёпрст
 
17.05.17
09:25
(13) у тебя там неразрывный пробел, убери его через СтрЗаменить и наслаждайся
16 NikVars
 
17.05.17
09:29
(14) Посмотри код символа, который должен исчезнуть по СокрЛП(). Посмотри длину строки. Посчитай глазками буковки и пробелы.
У тебя проблема не с СокрЛП(), а с содержимым. Воевал я как-то с символом с кодом 160.
Тебе в помощь
https://yandex.ru/yandsearch?&clid=2186620&text=символ%20с%20кодом%20160%20в%20excel&lr=213
17 Sayan_mi
 
17.05.17
09:31
Да там код символа = 160, а не пробела (32)
18 Sayan_mi
 
17.05.17
09:33
Так что функцию делаю сам исходя из кодов символов.
Тото у них и эксель не обрезал пробелы.
19 Sayan_mi
 
17.05.17
09:35
Нашел вариант использования заменить.
20 NikVars
 
17.05.17
09:38
"Спасибо" тоже приветствуется.
21 Sayan_mi
 
17.05.17
09:45
Точнее  конечный результат получился вот такой:
СокрЛП(СтрЗаменить(НашЛист.Cells(i,1).Text, Симв(160), ""));
А то там и пробелы тоже присутствовали.

Всем спасибо!!!
22 NikVars
 
17.05.17
09:50
(21) Коды 160 могут быть и в середине строки, легко данные испортить. Может на пробелы заменять? Потом двойные пробелы удалить, потом и СокрЛП().
23 Sayan_mi
 
18.05.17
05:20
Можно и на пробел, в начале и в конце обрежет, а в середине двойной пробел или одинарный не так важно.
24 Mikhail Volkov
 
18.05.17
06:10
(6) "неразрывные пробелы" или "двойные пробелы" какой код имеют? Что-то СтрЗаменить(ТекстИзHTML, Символ(160), Символы.ПС) 1С не ловит!?
Еще, что за коды 65279 65279 10 10 впереди ТекстИзHTML стоят, вроде как двойные Символы.ПС, но не они!?
25 Mikhail Volkov
 
18.05.17
06:12
(17) Символ(32) разве не "2"?
26 1dvd
 
18.05.17
07:51
(24) Давно в клюшках появилось перечисление Символы?
27 Mikhail Volkov
 
18.05.17
09:12
(26) Не в клюшках дело, вопрос про "неразрывные пробелы" и "двойные пробелы"
28 Ёпрст
 
18.05.17
09:18
(21) делай как в (22)

Вася = СтрЗаменить(НашЛист.Cells(i,1).Text, Симв(160), " ");
Пока Найти(Вася,"  ")>0 Цикл
   Вася = СтрЗаменить(Вася,"  "," ");
КонецЦикла;
Вася = СокрЛП(Вася);
29 orefkov
 
18.05.17
09:34
(28)
Профи делают так :)
replace(/^\s+|\s+$|\s{2,}/g, '')
30 orefkov
 
18.05.17
09:35
+(29)
упс, не профи :(
Двойные пробелы совсем удалит.
31 Масянька
 
18.05.17
09:37
(28) (29) Я так понимаю - у вас обоих 22 см :)
32 Ёпрст
 
18.05.17
09:39
(30) сходу, тоже не придумал, как оставить только один пробел в конце.
33 Ёпрст
 
18.05.17
09:40
через регулярку
34 NikVars
 
18.05.17
09:42
(31) Это с учетом пробелов и кодов 160 или без?
35 orefkov
 
18.05.17
09:49
(34)
Тут кстати, скорее всего зависит от реализации движка регулярок. На каждом надо пробовать - будет ли он считать Симв(160) пробельным символом или нет.
Если открыть в хроме консоль и набрать
("-" + String.fromCharCode(160) + "-").replace(/\s/, '$')
получим
"-$-"
А как поведёт себя к примеру VB RegExp - не знаю.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший