Главная страница
    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.45 MB
Время: 0.034 c
14-1079149872
X9
2004-03-13 06:51
2004.04.18
Перход на Linux


3-1079811622
Алексей31
2004-03-20 22:40
2004.04.18
Как просмотреть структуру БД на уровне таблиц?


1-1080636519
Question2004
2004-03-30 12:48
2004.04.18
Компонента TWebBrowser


9-1066175102
Кен
2003-10-15 03:45
2004.04.18
GLScene Как визуально добавить TGLODEDummy ? Почему то немогу


3-1079670894
Сказочник
2004-03-19 07:34
2004.04.18
Два SELECTа подряд......





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский