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