Конференция "Базы" » Буквы Е и Ё. Контекстный поиск [D7]
 
  • Den (18.02.10 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 © (18.02.10 16:16) [1]

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

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

    А так же Шеглов, Шилов и Птицын. 8-)
  • Den (18.02.10 16:38) [3]
    Нк может я неудачный пример привел.....но вопрос остался
  • Den (18.02.10 16:40) [4]

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

    Фамилия этого человека пишется правильно именно Щёголев....
  • Den (18.02.10 16:40) [5]

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

    Фамилия этого человека пишется правильно именно Щёголев....
  • Jeer © (18.02.10 16:47) [6]
    буква епс - давно уже на отбраковке.
    Впрочем, как и многие слова.
  • Sergey13 © (18.02.10 16:51) [7]
    > [5] Den   (18.02.10 16:40)

    Ну так если пользователь правильно напишет, то система правильно найдет.
    Но тут за поиск отвечает пользователь, а при перестановках - автор программы.
    И например когда деньги уйдут (или спишутся) не Щёголеву, а Щеголёву, то можно и поиметь неприятностей.
    Впрочем дело твое. Для поиска вариантов может и неплохо.
  • 12 © (18.02.10 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

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


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

    А микросхемы из Китая могут считать что его правильно зовут Лунь Цзы
  • Медвежонок Пятачок © (18.02.10 17:21) [9]
    Found := ExecRegExpr('(?i)ще|ёголев',Field.AsString)

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

    введенное юзером 'щеголев' или 'щёголев' преобразовывать перед поиском в '(?i)ще|ёголев'
  • Медвежонок Пятачок © (18.02.10 17:35) [10]
    либо вообще тупо и просто:

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

    воистину
    "чтоб так петь - двадцать лет учиться надо"
  • 12 © (18.02.10 17:46) [11]

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

    не, у всех меняем фамилии на "ИТОГО" и не паримся %)
  • Den (18.02.10 22:42) [12]
    Чпачибо буду думать))
  • Den (18.02.10 22:44) [13]
    Тьфуты ))) Клава глючит. Спасибо хотел сказать ))
 
Конференция "Базы" » Буквы Е и Ё. Контекстный поиск [D7]
Есть новые Нет новых   [134434   +28][b:0][p:0.002]