Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.029 c
11-1063175599
dataMaster
2003-09-10 10:33
2004.04.18
Как очистить PaintBox?


1-1080801799
ПрогерШ
2004-04-01 10:43
2004.04.18
Как в эдите сделать токо ввод английскеих букв?


6-1076475026
AloneAli
2004-02-11 07:50
2004.04.18
Не могу законнектиться к Outlook у


1-1080562169
Mim
2004-03-29 16:09
2004.04.18
Порядок чтения published свойств


14-1079942353
Болельщик
2004-03-22 10:59
2004.04.18
Вчера в КВН





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский