|
|
|
СтрЗаменить() без учета регистра | ☑ | ||
|---|---|---|---|---|
|
0
totparen
09.06.11
✎
09:01
|
Всем привет! Наверняка сейчас тумаков огребу - лень моск тревожить, может есть у кого готовая функция замены строк без учета регистра?
|
|||
|
1
zak555
09.06.11
✎
09:03
|
это что ли ?
Фунцкия ВрегСтрЗаменить(Стр, Что, НаЧто) Возврат СтрЗаменить(Стр, ВРЕг(Что), ВРег(НаЧто)); КонецФункции |
|||
|
2
zak555
09.06.11
✎
09:03
|
т.е. так :
Функция ВрегСтрЗаменить(Стр, Что, НаЧто) Возврат СтрЗаменить(Стр, ВРЕг(Что), ВРег(НаЧто)); КонецФункции |
|||
|
3
KishMish
09.06.11
✎
09:04
|
(2)т.е. так:
Фунцкия ВрегСтрЗаменить(Стр, Что, НаЧто) Возврат СтрЗаменить(ВРЕг(Стр), ВРЕг(Что), ВРег(НаЧто)); КонецФункции |
|||
|
4
Темный Эльф
09.06.11
✎
09:04
|
(2)Ну а если в Стр все нужные символы в нижнем регистре, что получишь?
|
|||
|
5
Темный Эльф
09.06.11
✎
09:05
|
(3)А если нужно сохранить регистр незаменяемых символов?
|
|||
|
6
andrewks
09.06.11
✎
09:05
|
а никто не задумался над тем, что автору надо сохранить разрядность оставшегося текста?
|
|||
|
7
andrewks
09.06.11
✎
09:05
|
(5) опередил, блин!
|
|||
|
8
1Сергей
09.06.11
✎
09:06
|
Это не то, но может, поможет:
Врег с исключением |
|||
|
9
Ёпрст
гуру
09.06.11
✎
09:06
|
СтрЗаменить(нрег("Вася"),нрег("ва"),"лох") = лохся
|
|||
|
10
KishMish
09.06.11
✎
09:06
|
(5) тут тогда советую сделать посимвольную проверку и щзапомнить расположение регистров в двоичной строке типа 100101001001
потом получить все в одном регистре и по строке восстановить регистры |
|||
|
11
1Сергей
09.06.11
✎
09:07
|
(9) СтрЗаменить(нрег("ВаСя"),нрег("ва"),"лох") = лохся
|
|||
|
12
KishMish
09.06.11
✎
09:09
|
+(10) не факт что колво заменяемых симолов будет равно колву заменяющих, так что тут надо значь конкретно задачу, что надо в (0) Автору
|
|||
|
13
totparen
09.06.11
✎
09:13
|
Ох йоу... понаписали то.. не успел тему создать.
Всяко одной СтрЗаменить() в этом деле не обойтись. () Правильно сказали, не нужно менять регистр в исходнике. |
|||
|
14
zak555
09.06.11
✎
09:13
|
(10) там нет разрыва &
|
|||
|
15
KishMish
09.06.11
✎
09:14
|
непроверял, но думаю алгоритм рабочий
Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); Пока Номер>0 Цикл ИсходнаяСтрока=Лев(ИсходнаяСтрока,Номер-1)+ЗаменяемаяСтрока+Сред(ИсходнаяСтрока,Номер+СдрЛлина(ЗаменяемаяСтрока)); Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); КонецЦикла; |
|||
|
16
Ёпрст
гуру
09.06.11
✎
09:14
|
(11)
SELECT replace('ВаСя','ва','лох') = лохСя |
|||
|
17
totparen
09.06.11
✎
09:19
|
(15) не подойдёт для несколько замен в одной строке. Рекурсию придётся видимо делать.
|
|||
|
18
KishMish
09.06.11
✎
09:28
|
(17) почему не подойдет, а цикл зачем там стоит?
|
|||
|
19
1Сергей
09.06.11
✎
09:31
|
(15) Скорее всего будет затык, если надо в строке
"Шуба с переподвертом" заменить "под" на "подвыпод" |
|||
|
20
KishMish
09.06.11
✎
09:35
|
(19) ты прав, тогда предлагаю так
ХитраяСтрока="<#KISHMISH#>"; Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); Пока Номер>0 Цикл ИсходнаяСтрока=Лев(ИсходнаяСтрока,Номер-1)+ЗаменяемаяСтрока+Сред(ИсходнаяСтрока,Номер+СдрЛлина(ХитраяСтрока)); Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); КонецЦикла; СтрЗаменить(ИсходнаяСтрока,ХитраяСтрока,Заменяе); |
|||
|
21
KishMish
09.06.11
✎
09:37
|
+(20) исправлю
ХитраяСтрока="<#KISHMISH#>"; Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); Пока Номер>0 Цикл ИсходнаяСтрока=Лев(ИсходнаяСтрока,Номер-1)+ХитраяСтрока+Сред(ИсходнаяСтрока,Номер+СдрЛлина(ХитраяСтрока)); Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); КонецЦикла; СтрЗаменить(ИсходнаяСтрока,ХитраяСтрока,ЗаменяемаяСтрока); |
|||
|
22
1Сергей
09.06.11
✎
09:47
|
Функция ЗаменаПодстроки(Знач Исходная, Подстрока, Замена)
Рез = ""; Позиция = Найти(Врег(Исходная), Врег(Подстрока)); Пока Позиция>0 Цикл Сообщить(Рез); Рез = Рез + Лев(Исходная, Позиция - 1) + Замена; Исходная = Сред(Исходная, Позиция + СтрДлина(Подстрока)); Позиция = Найти(Врег(Исходная), Врег(Подстрока)); КонецЦикла; Возврат Рез + Исходная; КонецФункции // ЗаменаПодстроки |
|||
|
23
1Сергей
09.06.11
✎
09:50
|
(22)* Сообщить(Рез); - лишнее
|
|||
|
24
totparen
09.06.11
✎
09:53
|
(21) Косячит:
Заменяет "Ехал грека через реку, видит грека в реке рак." на "Ехал грЫЫЫЫку, видит грЫЫЫЫак." Функция КишМишьЗамена(перемИсходнаяСтрока,ИскомаяСтрока,ЗаменяемаяСтрока) ХитраяСтрока="<#KISHMISH#>"; ИсходнаяСтрока = перемИсходнаяСтрока; Номер=Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); Пока Номер>0 Цикл ИсходнаяСтрока = Лев(ИсходнаяСтрока,Номер-1)+ХитраяСтрока+Сред(ИсходнаяСтрока,Номер+СтрДлина(ХитраяСтрока)); Номер = Найти(ВРег(ИсходнаяСтрока),Врег(ИскомаяСтрока)); КонецЦикла; Возврат СтрЗаменить(ИсходнаяСтрока,ХитраяСтрока,ЗаменяемаяСтрока); КонецФункции |
|||
|
25
totparen
09.06.11
✎
09:55
|
(24)* менял "ек" на "ЫЫЫЫ"
|
|||
|
26
1Сергей
09.06.11
✎
09:57
|
(24) а моя (22) выдаёт "Ехал грЫЫЫЫа через рЫЫЫЫу, видит грЫЫЫЫа в рЫЫЫЫе рак."
|
|||
|
27
totparen
09.06.11
✎
10:01
|
(26) Пасибо! Блин, напоминил мне заодно как значение в функцию передвать, а то я всё пытался воткнуть ПЕРЕМ, ваместо ЗНАЧ
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |