Главная страница
    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.45 MB
Время: 0.035 c
1-1080914299
P_a_s_h_a
2004-04-02 17:58
2004.04.18
Как уменьшить мерцание формы при перерисовке?


14-1079961432
RealRascal
2004-03-22 16:17
2004.04.18
Задача по физике - Давление в желудке у котенка


8-1073294869
dash78
2004-01-05 12:27
2004.04.18
Автодозвон из БД


4-1076316067
Samovar
2004-02-09 11:41
2004.04.18
Список API функций в системных dll


1-1080894120
IrviS
2004-04-02 12:22
2004.04.18
Как сделать для кнопки свойство ShortCut Ctrl + "+"





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