Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.04.2012, 23:32
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию поиск без чувствительности к регистру

Хочу спросить как сделать лучше поиск без чувствительности к регистру.
Нужно искать и удалять некоторые слова.
я так понял аналогов pos и posEx без чувствительности нету, так как быть?
Переводить копию текста в нижний регистр и по позициям удалять в оригинале?
нужен наиболее быстрый вариант
Ответить с цитированием
  #2  
Старый 08.04.2012, 23:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

К примеру, AnsiStrIComp.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 09.04.2012, 00:07
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Сравнение строк?
Ответить с цитированием
  #4  
Старый 09.04.2012, 00:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Да, только нужно привести к PChar.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 09.04.2012, 00:22
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

а то есть перебирать и сравнивать...
Ответить с цитированием
  #6  
Старый 09.04.2012, 00:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Нет, просто привести к PChar, но можно использовать и AnsiSameText. Эта функция работает со стрингами.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 09.04.2012, 00:33
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

AnsiCompareText ( const S1, S2: string ): Integer;
возвращает позицию что ли тоже?
Ответить с цитированием
  #8  
Старый 09.04.2012, 00:34
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Да, и она не чувствительна к регистру.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 09.04.2012, 06:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от angvelem
Да, и она не чувствительна к регистру.

Ребят, справку-то читайте.
AnsiCompateText сравнивает 2 строки (AnsiString) и возвращает 0 если строки равны, -1 если первая строка меньше второй и 1, если больше.
Позицию эта функция НЕ ВОЗВРАЩАЕТ.

Если тебе надо удалять, то надо пользовать StringReplace. Там в третьем параметре можно указать, что сравнивать надо без учета регистра.
Ответить с цитированием
  #10  
Старый 09.04.2012, 07:48
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Да, не выдает
StringReplace пробовал медленно
Ответить с цитированием
  #11  
Старый 09.04.2012, 17:06
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
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;

вот получилось довольно быстро то что мне надо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025