Имя: Пароль:
1C
 
СтрЗаменить() без учета регистра
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) Пасибо! Блин, напоминил мне заодно как значение в функцию передвать, а то я всё пытался воткнуть ПЕРЕМ, ваместо ЗНАЧ
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан