Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.20;
Скачать: CL | DM;

Вниз

Буквы Е и Ё. Контекстный поиск   Найти похожие ветки 

 
Den   (2010-02-18 16:08) [0]

Помогите решить проблему, есть у меня программа, работает с БД Access, есть контекстный поиск (код ниже). Поиск ищет первую запись совпадающую с условием, потом по кнопке Enter продолжает поиск след. записи совпадающей с условием и т.д. Стоит задача сделать так чтобы буквы Е и Ё в поиске не различались, т.е. набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев"....пока никак не дойду своим умом....


var
 FoundRec: Boolean;
 FndEdit: string;
 Fld_0: TField;
begin
FndEdit := AnsiLowerCase(txtKonSearch.Text);
FoundRec := False;
         begin
           Fld_0 := DM.tbPhone.FieldByName("name");
           if txtKonSearch.Text <> "" then
           begin
             DM.dsMain.First;
             while not DM.dsMain.Eof do
             begin
               if Fld_0.IsNull then
               begin
                 DM.dsMain.Next;
                 Continue;
               end;
               if Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0 then
               begin
                 FoundRec := True;
                 break;
               end;
               DM.dsMain.Next;
             end;

             if not FoundRec then
             begin
               DM.dsMain.First;
               Application.MessageBox(PChar("Абонент <" + txtKonSearch.Text +
                 "> не найден"), "Информация", MB_OK + MB_ICONINFORMATION);
             end;
           end;


 
12 ©   (2010-02-18 16:16) [1]


> набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев".
> ...

почему не Щеголёв?


 
Sergey13 ©   (2010-02-18 16:29) [2]

> [0] Den   (18.02.10 16:08)
> т.е. набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев"

А так же Шеглов, Шилов и Птицын. 8-)


 
Den   (2010-02-18 16:38) [3]

Нк может я неудачный пример привел.....но вопрос остался


 
Den   (2010-02-18 16:40) [4]


> 12 ©   (18.02.10 16:16) [1]

Фамилия этого человека пишется правильно именно Щёголев....


 
Den   (2010-02-18 16:40) [5]


> 12 ©   (18.02.10 16:16) [1]

Фамилия этого человека пишется правильно именно Щёголев....


 
Jeer ©   (2010-02-18 16:47) [6]

буква епс - давно уже на отбраковке.
Впрочем, как и многие слова.


 
Sergey13 ©   (2010-02-18 16:51) [7]

> [5] Den   (18.02.10 16:40)

Ну так если пользователь правильно напишет, то система правильно найдет.
Но тут за поиск отвечает пользователь, а при перестановках - автор программы.
И например когда деньги уйдут (или спишутся) не Щёголеву, а Щеголёву, то можно и поиметь неприятностей.
Впрочем дело твое. Для поиска вариантов может и неплохо.


 
12 ©   (2010-02-18 16:59) [8]

ну вот где считает, что равны

> if Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0 then


т.е. если FndEdit содержится в AnsiLowerCase(Fld_0.AsString)
ну сделай FndEdit2 = замененной е на ё из FndEdit где это нужно
и
if ( Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0     )
  or
  ( Pos(FndEdit2, AnsiLowerCase(Fld_0.AsString)) > 0     )    
then

только вот как ты это _где_нужно_ определишь?


> Фамилия этого человека пишется правильно именно Щёголев.

А микросхемы из Китая могут считать что его правильно зовут Лунь Цзы


 
Медвежонок Пятачок ©   (2010-02-18 17:21) [9]

Found := ExecRegExpr("(?i)ще|ёголев",Field.AsString)

первый аргумент формировать на основе введенного юзером значения.

введенное юзером "щеголев" или "щёголев" преобразовывать перед поиском в "(?i)ще|ёголев"


 
Медвежонок Пятачок ©   (2010-02-18 17:35) [10]

либо вообще тупо и просто:

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

воистину
"чтоб так петь - двадцать лет учиться надо"


 
12 ©   (2010-02-18 17:46) [11]


> заменяем в текущей проверяемой строке фамилии все "ё" на
> "е"
> то же самое делаем в строке поиска.

не, у всех меняем фамилии на "ИТОГО" и не паримся %)


 
Den   (2010-02-18 22:42) [12]

Чпачибо буду думать))


 
Den   (2010-02-18 22:44) [13]

Тьфуты ))) Клава глючит. Спасибо хотел сказать ))



Страницы: 1 вся ветка

Текущий архив: 2011.11.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
15-1311097465
картман
2011-07-19 21:44
2011.11.20
Взаимодействие объектов


15-1311884998
Юрий
2011-07-29 00:29
2011.11.20
С днем рождения ! 29 июля 2011 пятница


15-1311798599
Юрий
2011-07-28 00:29
2011.11.20
С днем рождения ! 28 июля 2011 четверг


15-1310041234
Palladin
2011-07-07 16:20
2011.11.20
Вакансия программиста (преимущественно Delphi)


15-1311199461
Делфиец
2011-07-21 02:04
2011.11.20
А есть ли в Питере?