Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Внизесть ли аналог 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c