Имя: Пароль:
1C
1С v8
Задача: Помогите разобрать однострочный код.
0 0xHelpPls
 
03.08.22
03:36
Привет, нашел тему в архиве, которая отвечает на первую часть моего вопроса (ссылка на тему - v8: задача подсчета количества слов в строке
Очень понравился ответ (39) на 3 странице от пользователя Deon, а именно:

Слов = СтрЧислоВхождений ( СтрЗаменить( СтрЗаменить(СокрЛП(Стр), " ", "ЭтаПрабэл"), "таПрабэлЭ", ""), "ЭтаПрабэл") + 1;

Цитата Deon "Это хрень которая посчитает тебе количество слов в строке, разделенных любым количеством пробелов."


Помогите, пожалуйста, разобрать почему код Deon'a справляется с два и более пробелами, а тот, который представлен снизу - нет.

Слов = СтрЧислоВхождений ( СтрЗаменить(СокрЛП(Стр), " ", "ЭтаПрабэл"), "ЭтаПрабэл") + 1;

Я не понимаю, что происходит в тот момент, когда мы добавляем СтрЗаменить( ... "таПрабэлЭ", ""), я не понимаю, почему просто переносим первую букву в слове ЭтаПрабэл и дальше делаем замену на  пустую строку (""), что происходит в этот момент?
Спасибо!
1 0xHelpPls
 
03.08.22
04:05
Спустя пару десятков минут решил раскидать на "бумажке":


Стр="Почему   я настолько туп";

"ПочемуЭтаПрабэлЭтаПрабэлЭтаПрабэля...."
Получается, что первый "пробел" у нас заменяется на "ЭтаПрабэл", а дальше идёт на замену в пустую строчку "таПрабэлЭ" то есть
"Почему"ЭтаПрабэл"ЭЭя"... и когда переходим к следующему слову, то цикл повторяется, верно?
2 Конструктор1С
 
03.08.22
04:50
(0) выкинь этот говнокод, и сам так никогда не делай. Ларчик открывается гораздо проще:

Слова = СтрРазделить(ИсходнаяСтрока, " ", Ложь);
3 unbred
 
03.08.22
07:35
(2) может ещё так.. на выходе примерно тоже РазложитьСтрокуВМассивПодстрок(Строка,Разделитель)
4 Ёпрст
 
03.08.22
09:10
(1) Чего непонятного то ? таким образом он заменяет все пробелы идущие друг за другом одним.
5 Ёпрст
 
03.08.22
09:13
И заменяется не первый пробел, а все на строку ЭтаПрабэл, будет ЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэл....

далее в этой строке заменяется все таПрабэлЭ на пустую строку, останется ЭтаПрабэ в финале, и потом подсчет количества ЭтаПрабэ и к этому числу +1, ибо между двумя словами пробел. Фирштейн ?
6 Serg_1960
 
03.08.22
09:14
(1) Неверно. От первого пробела (после их замены на буквы) остаётся только первая буква; удаляются все повторные пробелы, кроме последнего - от него остаётся окончание без первой буквы. В результате мы имеем одно полное "слово", соответствующее буквам одного пробела.
(2) Не соглашусь, это не "говнокод", а достойный пример оригинального нестандартного блистательного мышления. Разбирая код, я получил эстетическое удовольствие, подобное от осознания красоты фраз-палиндромов.

Согласен, - не для рабочего применения.

"Не зело полезен"(с)
7 Конструктор1С
 
03.08.22
15:39
(6) >>пример оригинального нестандартного блистательного мышления

>>Разбирая код, я получил эстетическое удовольствие

Ну ты понял, да? Одна строка, а потребовались усилия, чтобы прочитать и понять. У ТС это даже не получилось с первого раза. Потому и говнокод
8 СеменовСемен
 
03.08.22
15:42
(7) какой нибудь рекурсивный код динамического программирования тоже сходу не поймешь.
Но это не значит, что код плохой
9 Масянька
 
03.08.22
16:57
(6) Второму - плюсую.
10 Конструктор1С
 
03.08.22
17:42
(8) значит. Рекурсия - один из разновидностей зла
11 RomanYS
 
03.08.22
17:46
(6) (7) (8) (9) Непонятно о чём спор. Вся соль в  фразе "не для рабочего применения".
А в рамках промышленного применения - да,  говнокод.

(9)(6) Ну и чтобы немного развеять красоту замечу, что во фразе "Дорогой Эдуард" этот код насчитает только одно слово. Но идея - да, красивая.
12 СеменовСемен
 
03.08.22
17:47
(11) почему 1. Там же количество пробелов + 1
13 СеменовСемен
 
03.08.22
17:49
А какой хороший код по замене множественных пробеловина одиночный?
14 Галахад
 
гуру
03.08.22
18:01
Весь вопрос, зачем в одну строку-то?
15 RomanYS
 
03.08.22
18:05
(12) Вот чтобы ответить на вопрос "почему" придётся с этим чудо-кодом разобраться) Проверить элементарно.
16 Ёпрст
 
03.08.22
18:08
(11) 2 слова
17 Ёпрст
 
03.08.22
18:08
А ну да.. буква Э всё испортит
18 Ёпрст
 
03.08.22
18:09
Ну, для кода, достаточно было использовать 3 спецсимвола, а не слово "ЭтаПрабэл"
19 RomanYS
 
03.08.22
18:30
(13) вероятно добавить вторую строку к (2)