Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: 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 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
8-1063264030
lex
2003-09-11 11:07
2004.04.18
Как создать Overlay Surfaces?


14-1079741558
Паниковский
2004-03-20 03:12
2004.04.18
Третья мировая война


6-1076661575
bykopor
2004-02-13 11:39
2004.04.18
INDY, компонент TCP/IP


3-1079876881
Anarki
2004-03-21 16:48
2004.04.18
QReport - как узнать общее число страниц?


3-1079453414
DataBase
2004-03-16 19:10
2004.04.18
Сортировка в DBGridEh