Вниз
Скачать: CL | DM;

есть ли аналог pos() без учета регистра?   Найти похожие ветки 

← →
SergP ©   (2004-04-04 00:30) [0]

нужна функция поиска в строке всех вхождений подстроки и их замена.

Пока юзаю нечто типа:
while pos(...)>0 do
  begin
   delete(...);
   insert(...);
  end;

проблема в том что нужно искать чтобы заменить подстроку без учета регистра.
Что можно использовать вместо pos() для этого?
Или может есть готовые процедуры/функции для поиска и замены? (имеется ввиду стандартные)


← →
Zacho ©   (2004-04-04 00:41) [1]

А как насчет AnsiReplaceStr+AnsiUpper[Lower]Case ?


← →
SergP ©   (2004-04-04 01:56) [2]

Zacho ©   (04.04.04 00:41)
А как насчет AnsiReplaceStr+AnsiUpper[Lower]Case ?

Хм... AnsiReplaceStr выполняет поиск и замену тоже с учетом регистра.

а насчет AnsiUpper[Lower]Case я что-то не вижу способа как его "прицепить" в данном случае к AnsiReplaceStr.

Единственное, что приходит в голову, это нечто типа:

function replaceall(StrSource:string; StrFrom:string; StrTo:string):string;
var
p:integer;
begin
StrFrom:=AnsiUpperCase(StrFrom);
result:=StrSource;
p:=pos(StrFrom,AnsiUpperCase(Result));
while p>0 do
  begin
    delete(Result,p,length(StrFrom));
    insert(StrTo,Result,p);
    p:=pos(StrFrom,AnsiUpperCase(Result));
  end;
end;

Но это как-то все не так... (В смысле вроде бы не оптимально с точки зрения времени выполнения).


← →
Rouse_ ©   (2004-04-04 03:22) [3]

А как насчет UBPFD?


← →
Германн ©   (2004-04-04 03:36) [4]

"Не оптимально", только из-за того, что много раз выполняешь AnsiUpperCase(Result).

А почему бы не не выполнить после
 StrFrom:=AnsiUpperCase(StrFrom);

 result:=AnsiUpperCase(StrSource); ?

Ну да, конечно, ты скажешь, что не хочешь менять "внешний вид исходной строки".

Ну так, кто тебя заставляет пользовать только Result?

Ищи вхождение подстроки в строку в копиях, а Insert используй в реальных строках.


← →
SergP ©   (2004-04-04 09:09) [5]

>Ищи вхождение подстроки в строку в копиях, а Insert используй в реальных
>строках.

А как искать подстроку в копии? т.е. с первым вхождением все ясно, а вот остальные.... Ведь если пользоваться заранее сделаной копией, то в ней тоже придется делать delete и insert? чтобы "уничтожить" уже найденые вхождения для того чтобы pos() снова ни них же не останавливался, и кроме того чтобы позиции вхождений в копии и оригинале были одинаковыми.
А я не знаю что выполняется быстрее: delete+insert или ansiuppercase...

Поэтому и хотелось бы использовать уже готовую стандартную функцию, хотя очень странно что такой не оказалось, поиск и замена без учета регистра ведь очень часто везде используется...

>Rouse_ ©   (04.04.04 03:22)
>А как насчет UBPFD?

Это что такое?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
7-1076770080
MadGhost
2004-02-14 17:48
2004.04.18
Monitoring Communications Events


14-1079559965
Soft
2004-03-18 00:46
2004.04.18
Бессмертие души или околосмертный опыт?


1-1080473505
n313
2004-03-28 15:31
2004.04.18
Как сделать "автоматическое" увеличение высоты DBGrid а ?


1-1080551959
Basilio
2004-03-29 13:19
2004.04.18
Автоматические генераторы анализаторов


14-1080426305
Thor
2004-03-28 01:25
2004.04.18
Попробуйте, не пожалеете :)




   Наверх