![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Хочу спросить как сделать лучше поиск без чувствительности к регистру.
Нужно искать и удалять некоторые слова. я так понял аналогов pos и posEx без чувствительности нету, так как быть? Переводить копию текста в нижний регистр и по позициям удалять в оригинале? нужен наиболее быстрый вариант |
#2
|
||||
|
||||
![]() К примеру, AnsiStrIComp.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() Сравнение строк?
|
#4
|
||||
|
||||
![]() Да, только нужно привести к PChar.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
![]() а то есть перебирать и сравнивать...
|
#6
|
||||
|
||||
![]() Нет, просто привести к PChar, но можно использовать и AnsiSameText. Эта функция работает со стрингами.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() AnsiCompareText ( const S1, S2: string ): Integer;
возвращает позицию что ли тоже? |
#8
|
||||
|
||||
![]() Да, и она не чувствительна к регистру.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
![]() Цитата:
Ребят, справку-то читайте. AnsiCompateText сравнивает 2 строки (AnsiString) и возвращает 0 если строки равны, -1 если первая строка меньше второй и 1, если больше. Позицию эта функция НЕ ВОЗВРАЩАЕТ. Если тебе надо удалять, то надо пользовать StringReplace. Там в третьем параметре можно указать, что сравнивать надо без учета регистра. |
#10
|
||||
|
||||
![]() Да, не выдает
StringReplace пробовал медленно |
#11
|
||||
|
||||
![]() Код:
Function Replace(input,rep:string): string; var copybook: string; z,len: integer; begin copybook:=AnsiLowerCase(input); z:=pos(rep,copybook); len:=0; While z<>0 do begin delete(input,z-len,length(rep)); len:=len+length(rep); z:=posEx(rep,copybook,z+1); end; result:=input; end; вот получилось довольно быстро то что мне надо |