Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Извлечь номер телефона из строки 
:(
    Опции темы
Lunatikus
Дата 27.12.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



В принципе,вопрос об извлечении чисел вообще.
А конкретно есть строка с текстовой частью и телефонным номером в произвольном формате.
Одной из задач является проверка на совпадение телефонов в подобных строках с заданным.
Например,есть строка "Михаил Зарубин 5555555" и есть "Зарубин М. 555-55-55".Надо чтобы программа находила совпадение по номеру телефона.
Смотрел функции в ДРКБ,много всего и непонятно,в каком направлении двигаться.Подскажите логику действий без кода,а там уж разберусь.
Самый просто алгоритм,который вижу-собрать все цифры из строки и сравнить полученные строчки цифр.Но вот непонятно,как извлечь эти цифры.Ну разве что искать последовательно цифру 1,потом 2,потом 3 и так далее.Тогда определение последовательности будет довольно сложным для меня.

Буду благодарен,если поможете.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Rennigth
Дата 27.12.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Lunatikus @  27.12.2007,  10:38 Найти цитируемый пост)
в каком направлении двигаться

В сторону регулярных выражений smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Qu1nt
Дата 27.12.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Ну если без регулярок, можно так:
Код

procedure TForm1.Button1Click(Sender: TObject);

  function IsDigit(Symbol: Char): Boolean;
  var
    Code: Integer;
  begin
    Result := TryStrToInt(Symbol, Code);
  end;

var
  Edit  : string;
  i     : Integer;
  Phone : string;
begin
  Edit := 'John Do. 55-77 55.0';
  for i := 1 to Length(Edit) do
    if IsDigit(Edit[i]) then
      Phone := Phone + Edit[i];
  Self.Caption := Phone;
end;

PM MAIL   Вверх
Lunatikus
Дата 27.12.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



"В сторону регулярных выражений "
спасибо,почитал.Сложно разбираться,когда описание на инглише.Видимо,я настолько туп,что не смог сразу понять,как использовать эту теорию на практике-примеров не нашел пока.


Qu1nt, спасибо,не знал про эту функцию выделения цифр.Но это же для ASCII только?

Это сообщение отредактировал(а) Lunatikus - 27.12.2007, 11:32


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Qu1nt
Дата 27.12.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Lunatikus, точного ответа дать не могу. Можно заменить string, Char на WideString и WideChar соответственно.
PM MAIL   Вверх
dumb
Дата 27.12.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(Qu1nt @  27.12.2007,  11:23 Найти цитируемый пост)
IsDigit
хм. в дельфях вроде как есть более удобный и интуитивно понятный вариант типа 
Код

if Edit[i] in ['0'..'9'] then

и потом, тут по-хорошему надо чуть более интеллектуальный разбор делать - выделять последовательность определенной длины(например, не меньше 5 и не больше 15), пропуская только определенные символы '-',' ','(',')', чтобы исключить одиноко стоящие цифры. разбор строк удобно делать с помощью регэкспов, как уже тут упоминалось.
PM MAIL   Вверх
Lunatikus
Дата 27.12.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



"и потом, тут по-хорошему надо чуть более интеллектуальный разбор делать - выделять последовательность определенной длины(например, не меньше 5 и не больше 15), пропуская только определенные символы '-',' ','(',')', чтобы исключить одиноко стоящие цифры. разбор строк удобно делать с помощью регэкспов, как уже тут упоминалось. 
"

согласен,надо,ибо в строке может быть и несколько телефонов и адрес.Буду дальше искать пример регулярных выражений с пояснением на русском языке.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Qu1nt
Дата 27.12.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



dumb, однозначно. Я привел наипростейший вариант решения задачи, без проверок и регэкспов.
PM MAIL   Вверх
dumb
Дата 27.12.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Lunatikus, если хочешь процитировать, то выдели кусок фразы и нажми "быстрая цитата" в шапке поста цитируемого.

Цитата(Lunatikus @  27.12.2007,  12:09 Найти цитируемый пост)
в строке может быть и несколько телефонов и адрес
ты приведи десяток строк. сами данные можешь поменять, чтоб не палить, но их вид(структуру) не меняй.
PM MAIL   Вверх
Lunatikus
Дата 27.12.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



1)г. Минск +335(1) 163 56 67 10,        183 96 35 86, 183 66 57 18  www.atlantica.bu
2)г. Москва (495) 537 48 61, 739 59 24 www.normaccon.ru
3)г. Москва (495) 211 19 64,211 99 01  www.owenia.ru [email protected](сбыт) 
4)г. Москва (495) 935 25 24, 941 28 18  www. Teknodingo.ru
5)г. Санкт-Петербург (812) 433 84 15 [email protected]
6)www.pirovandr.com
7)г.Ростов (863) 211 30 10   www.berli.ru
8)г.Москва (495) 995 53 53 www.per.ru
9)г.Москва (495) 722 37 75, 333 47 73  www.telec.ru
10)г.Москва (495) 113 97 93, 757 12 77 www.tla.ru



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
dumb
Дата 27.12.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



дельфей не разумеем, посему не обессудьте, ежели что не так... smile

Код

function GetPhones(Line: String; var PhoneList: TStringList): Integer;
var
  i: Integer;
  s, ps: String;
  R: TRegExpr;
begin
  PhoneList.Clear;
  R := TRegExpr.Create;
  try
    R.ModifierR := true;
    R.Expression := '[ +\d\(\)]{5,25}';
    if R.Exec(Line) then
      repeat
        ps := '';
        s := R.Match[0];
        for i := 1 to Length(s) do
          if s[i] in ['0'..'9'] then
            ps := ps + s[i];
        if Length(s) > 0 then
          PhoneList.Add(ps);
      until not R.ExecNext;
  finally
    FreeAndNil(R);
  end;
  Result := PhoneList.Count;
end;


TRegExpr

PM MAIL   Вверх
MetalFan
Дата 27.12.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(dumb @  27.12.2007,  15:58 Найти цитируемый пост)
R.Expression := '[ +\d\(\)]{5,25}';

а перед "+" разве слэш не нужен?




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Lunatikus
Дата 28.12.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



А без установки новых компонентов никак?
Спасибо,буду разбирать =)


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
dumb
Дата 28.12.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(Lunatikus @  28.12.2007,  11:09 Найти цитируемый пост)
А без установки новых компонентов никак?
ты хочешь сам реализовать разбор "регулярок"?! smile
и, кстати, ничего никуда "ставить" не надо - достаточно в проект добавить один .pas файл.
PM MAIL   Вверх
Lunatikus
Дата 28.12.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



а,прошу прощения,неправильно понял =)


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.