|
v7: Первые буквы в словах сделать заглавными | ☑ | ||
---|---|---|---|---|
0
Масянька
06.02.15
✎
16:46
|
День добрый!
Есть нечто подобное в стандарте (порылась - не нашла): есть строка, в ней несколько слов (может быть и одно), слова разделены - пробел, точка, тире и т. д. (то есть не только пробелом) - все слова в строке сделать с большой буквы. Заранее спасибо. |
|||
1
anatoly
06.02.15
✎
16:49
|
несколько раз разложить строку в массив (с каждым разделителем).
сделать Врег на первый символ каждой подстроки и собрать обратно с разделителем. повторить для каждого разделителя. |
|||
2
anatoly
06.02.15
✎
16:50
|
ну и сначала наверное Нрег для всей строки, если заранее неизвестно какие символы, и требуется чтобы только первая буква большая.
|
|||
3
Duke1C
06.02.15
✎
16:52
|
(0) Откуда у вас такие задачи-то берутся? :))
Ща до магазина схожу, если не решишь самостоятельно подсоблю кодом |
|||
4
Масянька
06.02.15
✎
16:54
|
(1) То есть стандарта нет?
(3) Ой! Я такая ... противная :))) |
|||
5
Абыр
06.02.15
✎
16:56
|
кисло-сладкий - одно слово?)
|
|||
6
Масянька
06.02.15
✎
16:58
|
(5) Два. Должно получиться - Кисло-Сладкий.
|
|||
7
Deon
06.02.15
✎
16:58
|
(1) Я бы зашел не со стороны разделителей, а со стороны русских букв. Всё остальное можно считать разделителем.
|
|||
8
Масянька
06.02.15
✎
17:05
|
(7) Хорошая идея...
|
|||
9
Ёпрст
06.02.15
✎
17:05
|
регуляркой разбиваешь на слова и дальше всё просто
|
|||
10
Deon
06.02.15
✎
17:06
|
Кстати, а условие:
ВРег(Символ) = Нрег(Символ) наверняка будет выдавать Истину только в случае небукв. |
|||
11
Ёпрст
06.02.15
✎
17:06
|
можно и примитив - цикл по символу и Врег
|
|||
12
Deon
06.02.15
✎
17:07
|
Примитив быстрее com-регулярки
|
|||
13
anatoly
06.02.15
✎
17:10
|
(11) имхо кода будет больше чтобы ловить первый символ слова...
|
|||
14
Гёдза
06.02.15
✎
17:11
|
А в 8 есть )))
|
|||
15
Масянька
06.02.15
✎
17:11
|
(9) Какой "регуляркой"?
|
|||
16
Масянька
06.02.15
✎
17:12
|
(14) И что?
|
|||
17
Ёпрст
06.02.15
✎
17:12
|
(12) ну не знаю, не проверял, для большого текста, не знаю... мерить надо :)
|
|||
18
Ёпрст
06.02.15
✎
17:13
|
(15) регулярными выражениями
|
|||
19
Масянька
06.02.15
✎
17:14
|
(18) Через разделитель?
|
|||
20
Deon
06.02.15
✎
17:15
|
(17) У меня в проведении документа было. Перепроведение замедлялось хорошо так.
|
|||
21
Deon
06.02.15
✎
17:15
|
(19) Делай циклом. Дольше будешь изучать регулярки
|
|||
22
Масянька
06.02.15
✎
17:20
|
(21) Мне очень нравится идея из (7). Кстати - спасибо :)
|
|||
23
Deon
06.02.15
✎
17:22
|
Пожалуйста
|
|||
24
Duke1C
06.02.15
✎
17:30
|
На вот на скорую руку:
ЭтоБуквы="абвгдеёжзийклмнопрстуфхцчшщьыъэюя"; ДС=СтрДлина(МояСтрока); ГотоваяСтрока="";ПерваяБуква=0; Для Л=1 по ДС Цикл Символ=Сред(МояСтрока,Л,1); ПерваяБуква=?(Найти(ЭтоБуквы,Нрег(Символ))>0,ПерваяБуква+1,0); ГотоваяСтрока=ГотоваяСтрока+?(ПерваяБуква=1,Врег(Символ),Символ); КонецЦикла; |
|||
25
Kumar_K
06.02.15
✎
17:30
|
БольшаяБ = 1;
строкаитог = ""; стр = СОКРЛП(СТР1); Для а=1 По Стрдлина(Стр) Цикл тексимв = Лев(стр,а) ; тексимв = Прав(тексимв,1); Если а=1 Тогда тексимв = Врег( тексимв); БольшаяБ = 0; КонецЕсли; Если БольшаяБ = 1 Тогда тексимв = Врег( тексимв); БольшаяБ = 0; КонецЕсли; Сообщить(КодСимв(тексимв)); Если ((КодСимв(тексимв) > 96) и (КодСимв(тексимв) < 123) ) Тогда Иначе БольшаяБ = 1; КонецЕсли; строкаитог = строкаитог + тексимв; КонецЦикла; Сообщить( строкаитог); (КодСимв(тексимв) < 123) сами коды надо исправить |
|||
26
Kumar_K
06.02.15
✎
17:31
|
(24) Одновременно
|
|||
27
Duke1C
06.02.15
✎
17:36
|
+ (24) Кстати, если нужно чтобы гарантировано заглавными были только первые буквы, то так:
ДС=СтрДлина(МояСтрока); ГотоваяСтрока="";ПерваяБуква=0; Для Л=1 по ДС Цикл Символ=Нрег(Сред(МояСтрока,Л,1)); ПерваяБуква=?(Найти(ЭтоБуквы,Символ)>0,ПерваяБуква+1,0); ГотоваяСтрока=ГотоваяСтрока+?(ПерваяБуква=1,Врег(Символ),Символ); КонецЦикла; |
|||
28
Масянька
06.02.15
✎
17:39
|
Спасибо пацаны!
Чмоки не будет - я свой ваяю :) Все равно - спасибо!!!! |
|||
29
Duke1C
06.02.15
✎
17:39
|
(26) Ничего личного, но я бы за такой код руки бы оторвал, хотя... работает не трожь :)))))
Особенно порадовало: тексимв = Лев(стр,а) ; тексимв = Прав(тексимв,1); |
|||
30
Duke1C
06.02.15
✎
17:42
|
(28) Ну наваяешь - поделись, так сказать для расширения нашего кругозора :)
|
|||
31
Deon
06.02.15
✎
17:46
|
Кто первым напишет решение в одну строку?
|
|||
32
Duke1C
06.02.15
✎
17:51
|
(31) Ну барин, тут помощник нужен :))))
|
|||
33
Масянька
06.02.15
✎
17:55
|
(30) Ага! Чтобы вы тут ... раскритиковали по полной программе?
|
|||
34
Deon
06.02.15
✎
17:57
|
(33) Чтобы мы порадовались и похвалили.
|
|||
35
Масянька
06.02.15
✎
18:00
|
Я не могу найти - по какой таблице эска коды берет?
"р" = 238 |
|||
36
Deon
06.02.15
✎
18:02
|
(35) Слющяй, зачэм тебе эти коды-шмоды. Держи супер-разработку:
ВРег(Символ)=НРег(Символ) |
|||
37
Duke1C
06.02.15
✎
18:03
|
(33) см. (34) + привели его к (31)
(35) *не претендуя на уникальность* - а мой вариант не пробовала? Глядишь и с кодами возиться не надо будет... |
|||
38
kosts
06.02.15
✎
18:04
|
Проверьте кто-нибудь, а то проверить негде. Первый символ не делается заглавным (если вообще это работает). Не судите строго, сегодня пятница )) |
|||
39
Масянька
06.02.15
✎
18:04
|
(36) Да видела я.
Попробую... |
|||
40
anatoly
06.02.15
✎
18:05
|
(35) там коды для латиницы!
для кирилицы >128 |
|||
41
Deon
06.02.15
✎
18:05
|
(37) Я не знаю как 31 сделать. Наверно, никак. Ну, разве что, не пользоваться Enter'ом при написании кода.
|
|||
42
Duke1C
06.02.15
✎
18:06
|
+ (36) кстати, да - сам не пробовал, но раз человек говорит, значит что-то в этом есть...
|
|||
43
Deon
06.02.15
✎
18:06
|
(38) Рекурсия рулит. Зачёт. Хз работает или нет.
|
|||
44
Deon
06.02.15
✎
18:07
|
(42) Я тоже не пробовал, но выглядит забавно
|
|||
45
Масянька
06.02.15
✎
18:08
|
Всё... Голова квадратная... До понедельника...
Всем - спасибо и (уговорили) ЧМОКИ! :))) |
|||
46
Duke1C
06.02.15
✎
18:08
|
Вау, как темка то развилась, уже и с рекурсией примеры пошли...
Хотя то ли дело - пятница же :)))) |
|||
47
kosts
06.02.15
✎
18:08
|
(38) Эта строка такая должна быть
|
|||
48
Duke1C
06.02.15
✎
18:14
|
+ (46) Кстаааааааааааати а в нонешнем году пятничные темы отменились чтоль, а то с этими годовыми/квартальными что-то совсем не до этого было, а щас по поиску смотрю - последняя пятничная тема аж в начале января была, или меня уже глючит вместе с поиском???
|
|||
49
Kumar_K
06.02.15
✎
18:15
|
(29) Наоборот, критика даже очень хорошо
Чем, конкретно не понравилось И чем убило тексимв = Лев(стр,а) ; тексимв = Прав(тексимв,1); PS да, я студент и в жизни рабочего никогда ничего не делал. Поэтому я за критику что б дров не навалять |
|||
50
anatoly
06.02.15
✎
18:15
|
ОбщегоНазначения.СделатьПервыеБуквыВСловахЗаглавными()
))) |
|||
51
anatoly
06.02.15
✎
18:15
|
(48) кризис - пятницы сократили.
|
|||
52
Deon
06.02.15
✎
18:16
|
(49) Просто есть функция Сред(), которой можно заметить 2 этих оператора
|
|||
53
Kumar_K
06.02.15
✎
18:16
|
(52) Знаешь, не знал спасибо.
|
|||
54
Deon
06.02.15
✎
18:21
|
(50) Кстати, есть функция:
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов() в частных случаях может помочь |
|||
55
Duke1C
06.02.15
✎
19:16
|
(49) Ну это хорошо, что так воспринимаешь. Я уж опосля нажатия Ctrl+Enter подумал - а не погорячился ли я?
Значит нет :))) P.S. Все мы когда-то студентами были - это нормально, тем более профессионализм это такая штука, что чем больше ты познаешь, чем чаще тебе кажется, что ты нихрена не знаешь :))) |
|||
56
Масянька
09.02.15
✎
09:43
|
Давайте - критикуйте :(
ДлинаСлова = СтрДлина(мСтрока); мСтрока = НРег(мСтрока); // первый символ - всегда заглавная ПервыйСимвол = Сред(мСтрока, 1, 1); мНоваяСтрока = Врег(ПервыйСимвол); Для й = 2 По ДлинаСлова Цикл ТекСимвол = Сред(мСтрока, й, 1); СледСимвол = Сред(мСтрока, й + 1, 1); Буква = ?(врег(ТекСимвол) = нрег(ТекСимвол),1,0); Если (Буква = 1) Тогда мНоваяСтрока = мНоваяСтрока + ТекСимвол + Врег(СледСимвол); й = й + 1; Иначе мНоваяСтрока = мНоваяСтрока + ТекСимвол; КонецЕсли; КонецЦикла; Возврат мНоваяСтрока; |
|||
57
Ненавижу 1С
гуру
09.02.15
✎
09:46
|
(10) неа, есть грузинский алфавит
|
|||
58
Масянька
09.02.15
✎
09:47
|
(57) Слюшай, дарагой! (с) Мы же не в Грузии :)
|
|||
59
kosts
09.02.15
✎
10:17
|
(56) Согласно заданию, надо сделать "Первые буквы в словах сделать заглавными", про нижний регистр ничего не сказано.
Для ".иванов" не работает... |
|||
60
Масянька
09.02.15
✎
10:20
|
(59) "." первой в строке быть не может.
|
|||
61
Chameleon1980
09.02.15
✎
10:23
|
список или строка, после которых нужно балшую букву.
и поехали по исходной строке |
|||
62
Chameleon1980
09.02.15
✎
10:23
|
список или строка, после которых нужно балшую букву.
список или строка символов, после которых нужно балшую букву. |
|||
63
welwel
09.02.15
✎
10:36
|
В типовой 77 вроде бы есть функция глРазделить, на выходе сз
Дальше к каждому элементу врег(лев(слово, 1)) + нрег(сред(слово,2)) вместо глРазделить можно заменить пробелы на РазделительСтроки, а потом обходить многострочную строку, использую функции СтрКоличество и СтрПолучить |
|||
64
kosts
09.02.15
✎
10:39
|
Пусть так
|
|||
65
Classic
09.02.15
✎
10:41
|
Результ = "";
Для Сч = 1 По СтрДлина(ИсходнаяСтрока) Цикл Результ = Результ + ?(Сч = 1 ИЛИ Сред(ИсходнаяСтрока, Сч-1,1) = " ", ВРЕГ(Сред(ИсходнаяСтрока, Сч,1)), Сред(ИсходнаяСтрока, Сч,1)) КонецЦикла; |
|||
66
Ёпрст
09.02.15
✎
10:45
|
(65) Хрень же.. если разделитель не пробел ?
А Бахши-Заде ? |
|||
67
Classic
09.02.15
✎
10:48
|
(66)
Если не пробел, то условие Сред(ИсходнаяСтрока, Сч-1,1) = " " меняется на Найти(" ;,.?-", Сред(ИсходнаяСтрока, Сч-1,1)) >0 |
|||
68
Масянька
09.02.15
✎
10:49
|
(64) Плюет в душу... :(
Истина, ложь - "это ж бубль-гум" (С) (в смысле семерка). Ну, и "ЭтоБуква = ВРег(Символ) <> НРег(Символ)" - тоже не работает. :( (67) Издеваешься?! |
|||
69
Classic
09.02.15
✎
10:50
|
(68)
В смысле? Ты не в курсе, какие могут быть разделители? Результ = ""; Для Сч = 1 По СтрДлина(ИсходнаяСтрока) Цикл Результ = Результ + ?(Сч = 1 ИЛИ Найти(" ;,.?-", Сред(ИсходнаяСтрока, Сч-1,1)) >0, ВРЕГ(Сред(ИсходнаяСтрока, Сч,1)), Сред(ИсходнаяСтрока, Сч,1)) КонецЦикла; |
|||
70
Масянька
09.02.15
✎
10:50
|
(69) Не-а.
|
|||
71
Classic
09.02.15
✎
10:52
|
(70)
Строка пра?5кадр как должна в результате выглядеть? |
|||
72
Поpyчик-4
09.02.15
✎
10:56
|
ТРег(<Строка>) не предлагать?
|
|||
73
Classic
09.02.15
✎
10:56
|
Если "слова" - это исключительно буквы, тогда
Результ = ""; Для Сч = 1 По СтрДлина(ИсходнаяСтрока) Цикл Результ = Результ + ?(Сч = 1 ИЛИ Найти("абвгдеёжзийклмнопрстуфкцчшщэюя", Нрег(Сред(ИсходнаяСтрока, Сч-1,1))) =0, ВРЕГ(Сред(ИсходнаяСтрока, Сч,1)), Сред(ИсходнаяСтрока, Сч,1)) КонецЦикла; |
|||
74
Масянька
09.02.15
✎
10:58
|
(71) Пра?5Кадр
(72) Нет :) (73) "Не исключительно" буквы. |
|||
75
Classic
09.02.15
✎
11:00
|
(74)
А что кроме букв? На каком примере тебе код из (73) (это кстати аналог ТРЕГ) не подходит |
|||
76
Chameleon1980
09.02.15
✎
11:04
|
пля ну список разделителей возможных
пошли по символам по исходной строке если очередной символ в исх строке входит в список возможных разделителей, то следующий символ ВРЕГ |
|||
77
Chameleon1980
09.02.15
✎
11:05
|
возможных разделителей могет сколько хочешь
|
|||
78
Classic
09.02.15
✎
11:05
|
(76)
Да вот пытаюсь то же самое донести. Но мне говорят, что бред |
|||
79
Duke1C
09.02.15
✎
15:47
|
(68) Млин а мой код из (24) не работает чтоль?
Как и писал в (3) - с магазина пришел - накидал, а проверять лень было, но по идее работать то должно... Или (28) принципиально? Т.е. спросить спрошу, но делать буду сама |
|||
80
Масянька
09.02.15
✎
16:25
|
(79) Я же говорила, что я "противная" ;)))))
Всегда интересно - сделай сам (С) |
|||
81
Duke1C
09.02.15
✎
17:11
|
(80) Ну мучайся, чо :)))
Но может все-таки проверишь, заодно и моё самолюбие потешится вдруг ;) |
|||
82
Масянька
09.02.15
✎
18:03
|
(81) Мда... А ты - противнее меня :)))
Завтра - попробую. |
|||
83
Duke1C
09.02.15
✎
21:01
|
Нее я просто немного настойчивый...:))) ну или неугомонный, там уж кому как больше нравится ;)
|
|||
84
1s_ivan
09.02.15
✎
22:49
|
Цикл перебрать все разделители
Цикл перебрать все буквы алфавита .. опять В исходной строке заменить (разделитель+БОЛЬШАЯ БУКВА) на (разделитель+маленькая буква) Конец Цикла Конец Цикла // при количестве разделителей 10, а букв 31 = 310 раз операция замены, т.е. эффективно использовать, только при строках более 300 символов - "больших строках". |
|||
85
Масянька
10.02.15
✎
08:47
|
(83) Сам себя не похвалишь... (С)
Работает :)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |