|
Как избавиться от запятых? | ☑ | ||
---|---|---|---|---|
0
Dr_Leo
05.02.18
✎
02:11
|
стр.Комментарий = СокрЛП(стр.Комментарий)+ " " + СокрЛП(Строка(стр.АД)) + ", " + СокрЛП(Строка(стр.ТФ)) + ", " + СокрЛП(Строка(стр.ТФ2)) + ", " + СтрокаДоставки + ", " + МО + ", " + СокрЛП(Строка(стр.ИН));
Когда одна или несколько строк имеют пустое значение, то комментарий имеет такой вид ,,,, ... как мне убрать эти запятые, при наличии пустых строк |
|||
1
Изучаю1С8
05.02.18
✎
02:22
|
?(стр.ТФ = "","",",")
и тд |
|||
2
Aleksey
05.02.18
✎
02:44
|
СтрЗаменить(стр.Комментарий,",,",",");
|
|||
3
Aleksey
05.02.18
✎
02:47
|
Ну или
Пока Найти(стр.Комментарий,",,")>0 цикл СтрЗаменить(стр.Комментарий,",,",","); КонецЦикла; |
|||
4
Aleksey
05.02.18
✎
02:47
|
т.е.
стр.Комментарий = СтрЗаменить(стр.Комментарий,",,",","); |
|||
5
Aleksey
05.02.18
✎
02:49
|
Только у тебя еще пробелы будут между запятыми
|
|||
6
Sj
05.02.18
✎
03:28
|
(3) это ты смело как-то
Запихнуть (1) и выводить с ее использованием. |
|||
7
Sj
05.02.18
✎
03:28
|
(6) + запихнуть в функцию
|
|||
8
Dr_Leo
05.02.18
✎
03:35
|
Мне кажется нужно, что то типа ЗначениеЗаполнено
|
|||
9
Chameleon1980
05.02.18
✎
05:20
|
(8)
нафига тебе и этого хватит: стр.Комментарий = СтрЗаменить(стр.Комментарий,",,",","); как выше подсказали |
|||
10
Chameleon1980
05.02.18
✎
05:21
|
тогда вот так даже:
стр.Комментарий = СтрЗаменить(стр.Комментарий,", , ",", "); |
|||
11
Chameleon1980
05.02.18
✎
05:25
|
ну или да:
добавление запятой очередного поля оформлять как + ?(СокрЛП(стр.ОчередноеПоле) = "","",", ") |
|||
12
1Сергей
05.02.18
✎
06:29
|
СтрЗаменить - это как-то по франчевски. В (1) правильнее
|
|||
13
mistеr
05.02.18
✎
06:57
|
(12) +1. Данные пользователя портить нельзя.
|
|||
14
Мимохожий Однако
05.02.18
✎
07:01
|
(11) +1 Нужна голосовалка ))
|
|||
15
Dr_Leo
05.02.18
✎
07:10
|
Сделал так
стр.Комментарий = СокрЛП(стр.Комментарий) +?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)), " " +СокрЛП(Строка(стр.АД)),"" ) + ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)) или ЗначениеЗаполнено(СокрЛП(стр.АД)),", "+СокрЛП(стр.Тф),"")+ ?(ЗначениеЗаполнено(СокрЛП(стр.АД))или ЗначениеЗаполнено(СокрЛП(стр.ТФ)),", "+СокрЛП(стр.Тф2),"") + ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СокрЛП(стр.ТФ2)),", " + СтрокаДоставки,"") +?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено (СтрокаДоставки),"" + МО,", ") ; |
|||
16
Chameleon1980
05.02.18
✎
07:30
|
для строк смело мог бы и ?(Условие,ПриУсловииДа,ПриУсловииНет)
|
|||
17
Dr_Leo
05.02.18
✎
08:02
|
(16) Это был мой второй вариант. Спасибо!
|
|||
19
Лефмихалыч
05.02.18
✎
08:13
|
(\,\s+)+
|
|||
20
Mikhail Volkov
05.02.18
✎
08:13
|
(0) Надо поправить источник возникновения лишних запятых...
(15) Вроде да. |
|||
21
patria0muerte
05.02.18
✎
08:24
|
(15) А потом приходят люди смотрят на это и кровоточат глазами
Есть хорошая встроенная функция СтрШаблон. Либо ее заменитель в БСП - ПодставитьПараметрыВСтроку() для старых версий платформы. Как минимум вот так: стр.Комментарий = СтрШаблон( "%1 %2 %3 %4 %5 %6", СокрЛП(стр.Комментарий), ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)), " " + СокрЛП(Строка(стр.АД)),""), ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)) или ЗначениеЗаполнено(СокрЛП(стр.АД)),", " + СокрЛП(стр.Тф),""), ?(ЗначениеЗаполнено(СокрЛП(стр.АД))или ЗначениеЗаполнено(СокрЛП(стр.ТФ)),", "+СокрЛП(стр.Тф2),""), ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СокрЛП(стр.ТФ2)),", " + СтрокаДоставки,""), ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СтрокаДоставки),"" + МО,", ") ); В разы читабельней. В целом - очень дикая склейка. Вероятно ее можно упростить раза в два точно. |
|||
22
Chameleon1980
05.02.18
✎
08:43
|
(21) да тот-же х, только вид сбоку
|
|||
23
FIXXXL
05.02.18
✎
08:46
|
(15) это аццкий ад какой то
вынеси в функцию Функция СтрокаСЗапятой(СтрВходящая) СтрВходящая = СокрЛП(СтрВходящая); СтрВходящая = ?(ЗначениеЗаполнено(СтрВходящая), СтрВходящая+","," "); КонецФункции и собирай с использованием функции |
|||
24
cw014
05.02.18
✎
09:17
|
СтруктураДанных = Новый Структура("Комментарий,Тф,ТФ2,СтрокаДоставки,МО,ИН", СокрЛП(стр.Комментарий)+ " " + СокрЛП(стр.АД), СокрЛП(стр.Тф), СокрЛП(стр.ТФ2), СтрокаДоставки, МО, СокрЛП(стр.ИН));
Комментарий = ""; Для Каждого КлючИЗначение Из СтруктураДанных Цикл Значение =СокрЛП(КлючИЗначение.Значение); Если ЗначениеЗаполнено(Значение) Тогда Комментарий = Комментарий + Значение + ", "; КонецЕсли; КонецЦикла; Комментарий = СокрЛП(Комментарий); стр.Комментарий = Лев(Комментарий, СтрДлина(Комментарий)-1); |
|||
25
Borteg
05.02.18
✎
09:26
|
Проверку лучше выполнять с помощью ПустаяСтрока()
|
|||
26
Dr_Leo
05.02.18
✎
09:39
|
(24) Спасибо! Как вариант!
|
|||
27
vicof
05.02.18
✎
10:31
|
Стрсоединить
|
|||
28
Aleksey
05.02.18
✎
10:35
|
Что то до сих пор никто через запрос не предложил.
|
|||
29
Сильф
05.02.18
✎
10:38
|
Ну вы и упоролись тут... Правильно - (1) + (25).
|
|||
30
Йохохо
05.02.18
✎
10:41
|
пять копеек на то, что потом автору позвонят и скажут, чтоп не трогал запятые, а то они АД от МО отличить не могут
|
|||
31
Serg_1960
05.02.18
✎
10:41
|
(0) "то комментарий имеет такой вид ,,,," - нет, она имеет вот такой вид: ", , , ," - забыл про пробелы.
(29) Да, мы такие :) Сто строк вместо пары СтрЗаменить() - словно авторам платят за количество строк :)) |
|||
32
Serg_1960
05.02.18
✎
11:06
|
СтрокаТекста = "Пара строк с СтрЗаменить(), , , , , , уберет все лишние кавычки, , ...";
СтрокаТекста = СтрЗаменить(СтрокаТекста, ", , ", ", "); СтрокаТекста = СтрЗаменить(СтрокаТекста, ", , ", ""); Сообщить(СтрокаТекста); // "Пара строк с СтрЗаменить(), уберет все лишние кавычки, ..." |
|||
33
Dr_Leo
06.02.18
✎
01:07
|
(30) Да не))), там где значение будет заполнено...запятая то будет, а где нет , она исчезнет.
|
|||
34
Dr_Leo
06.02.18
✎
04:52
|
(32) доработал с Вашим вариантом
|
|||
35
PuhUfa
06.02.18
✎
05:13
|
Сначала поставить ненужные пробелы а потом героически их выпиливать... за то всегда при деле -)
|
|||
36
Chameleon1980
06.02.18
✎
06:29
|
(35) так надо
|
|||
37
Wern
06.02.18
✎
08:45
|
(32) не сработает с первой и последней запятой. т.е. может быть вариант ", тут комментарий, " замена 2-х запятых с этим ничего не сделает.
|
|||
38
alxxsssar
06.02.18
✎
09:15
|
А при формировании строки нельзя поставить типа такого ?(ПустаяСтрока(стр.АД),""," " + СокрЛП(Строка(стр.АД)))
|
|||
39
alxxsssar
06.02.18
✎
09:15
|
+ (38)И дальше по всем параметрам
|
|||
40
Сияющий в темноте
06.02.18
✎
10:07
|
функция ДобавитьКСтроке(пСтрока,пДобавка,пРазделитель)
если пустаястрока(пДобавка)тогда Возврат если пусьаястрока(пСтрока)тогда пСтрока=пДобавка Иначе пСтрока=пСтрока+пРазделитель+пДобавка Конец |
|||
41
Serg_1960
06.02.18
✎
12:17
|
(37) "Позвольте, у меня все ходы записаны!"(с) - об этом в Вашем ТЗ ничего не было сказано :)
Эх, такой красивый и лаконичный (но неверный) алгоритм на корню сгубил. Придёт переквалифицироваться в управдомы, в кодеры: Исх = ", Этот алгоритм, , , , , кроме удаления ""лишних"" запятых, , удаляет начальные и конечные запятые, "; Врм = СтрЗаменить(Исх, ", ", Символы.ПС); Исх = ""; Для х = 1 По СтрЧислоСтрок(Врм) Цикл Исх = Исх + ?(ПустаяСтрока(СтрПолучитьСтроку(Врм, х)), "", ?(ПустаяСтрока(Исх), "", ", ") + СтрПолучитьСтроку(Врм, х)); КонецЦикла; Сообщить(Исх); // "Этот алгоритм, кроме удаления "лишних" запятых, удаляет начальные и конечные запятые" |
|||
42
Вафель
06.02.18
✎
12:21
|
лучше использовать СтрСроединить
|
|||
43
Serg_1960
06.02.18
✎
12:45
|
Я мог бы использовать СтрРазделить(), СтрСоединить(), а также СтрНачинаетсяС() и СтрЗаканчиваетсяНа()... но автор не озвучил платформу.
|
|||
44
Dr_Leo
07.02.18
✎
01:23
|
(43) УТ 11.1
|
|||
45
Fram
07.02.18
✎
01:36
|
я думаю на ответе (44) на вопрос (43) тему можно закрыть
|
|||
46
Tateossian
07.02.18
✎
02:38
|
Ужасный код. Видно, что юзается одно свойство стр. Скажем - стр - это структура. Создаем Новый Массив. И далее для каждого элемента коллекции
Массив.Добавить(ТвояСтрока). И последним шагом СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Массив); Учите функции типовых библиотек, а не изобретайте велосипеды. |
|||
47
Tateossian
07.02.18
✎
02:40
|
Функция ПолучитьСтрокуИзМассиваПодстрок игнорирует пустые строки и не лепит разделитель. Кстати, разделителем (второй параметр по умолчанию является запятая, но можно хоть Символы.ПС, хоть " ,".
|
|||
48
Fram
07.02.18
✎
05:09
|
(46) про бритву Оккама слышал когда нибудь?
|
|||
49
Dr_Leo
07.02.18
✎
08:28
|
Спасибо всем! Всё сделал. Всё работает)
|
|||
50
Serg_1960
07.02.18
✎
09:45
|
(45) Да, можно закрывать. Учитывая конфигурацию автора, задача может быть решена с помощью двух функций платформы 8.3: функция СтрРазделить() разделит на строки, игнорируя "пустые", а функция СтрОбъединить() - объединит их в результат задачи.
|
|||
51
Tateossian
07.02.18
✎
16:54
|
(48) Слыхал. А про принцип DRY слышал?
|
|||
52
Сильф
08.02.18
✎
19:21
|
(31) зато быстрее работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |