Страницы: 1
RSS
вычленить из текста номер квартиры
 
Коллеги, добрый день.
Подскажите, возможно ли каким-то способом выделить в отдельный столбик номер квартиры ( выделила красным в примере) или мне набирать штат людей и все вытаскивать ручками? В примере кусочек базы из 20 0000 подобных записей (((
 
Цитата
Katerina Larionova написал:
или мне набирать штат людей и все вытаскивать ручками?
если не объясните почему в этой мешанине надо брать только 2 знака после тире, почему не три или один
74-1721-56-41
2-6921-68-69
Лень двигатель прогресса, доказано!!!
 
Цитата
Сергей написал:
надо брать только 2 знака после тир
тут немного другая логика, не 2 знака после тире, там может быть один, два ли три знака. а вот номер  телефона ИНОГДА состоит из 00-00-00, и я гипотетически понимаю, что именно оставшиеся 2 или три цифры слева от этого номера и есть квартира.
Мешанина - это мягко сказано  :cry:  
 
Цитата
Katerina Larionova написал:
а вот номер  телефона ИНОГДА состоит из 00-00-00, и я гипотетически понимаю
из вашего примера не факт 4 строка номер  1-63-31  маска 0-00-00
Лень двигатель прогресса, доказано!!!
 
вариант применительный к вашей логике с хвостами и ушами к номеру квартиры
Код
=ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(ПСТР(A1;1;ПОИСК("??-??-??";A1)-1);"-";"         ");4));СЖПРОБЕЛЫ(ЛЕВСИМВ(ПОДСТАВИТЬ(ПСТР(A1;ПОИСК("-";A1)+1;4);",";"         ");4)))
Лень двигатель прогресса, доказано!!!
 
Katerina Larionova, тут все печальнее. Так как нет правила жесткого и возможны варианты которые не предумотреть, то возможность ошибки присутствует, а это значит что нужно все проверять. например такое 1-111-11-11 …. это квартира 1 или 11?
Изменено: БМВ - 15.04.2020 13:00:29
По вопросам из тем форума, личку не читаю.
 
Цитата
Katerina Larionova написал:
или мне набирать штат людей и все вытаскивать ручками?
может 1 раз оплатить услуги программиста?
макрос в 12 строк извлек из представленных 8 строк это:
17
77
32
42
25
32
69
89
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
может 1 раз оплатить услуги программиста?
Конечно, этим должны заниматься люди не просто умеющие прописать формулу (типа меня) но... это списки из соц.защиты на выдачу единоразовой продуктовой помощи людям 65+ ... я волонтер, о какой оплате может идти речь? ((((  
 
Цитата
БМВ написал:
это значит что нужно все проверять
я так и поняла...  :cry:  Спасибо  
 
Цитата
Сергей написал:
вариант
Спасибо. Частично получилось
 
я тоже здесь в какой-то мере волонтер
Код
Function GetApart$(s$)
  Dim re, p(), i&
  Set re = CreateObject("VBScript.RegExp"): s = Replace(s, vbTab, "")
  p = Array("кв\.(\d+)", "\d+[^-]+-(\d+)", "\d+-(d+)")
  For i = LBound(p) To UBound(p)
    re.Pattern = p(i)
    If re.test(s) Then
      s = re.Execute(s)(0).SubMatches(0): If Len(s) > 3 Then s = Left(s, Len(s) - 2)
      GetApart = s: Exit Function
    End If
  Next
End Function
Изменено: Ігор Гончаренко - 15.04.2020 15:49:49
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Игорь, единственный минус - это лучше не найти ничего чем найти неправильное. Это не критика решения , а скорее дополнение к №6. Но судя по №9 ТС это понимает.
По вопросам из тем форума, личку не читаю.
 
Ігор Гончаренко, О Боги! я практически рыдаю... не без огрехов, но хоть что то... глазами все равно придется проверять. Благодарю.
Мне кажется  таком хаосном файле без ручного труда не обойтись
 
БМВ,
у меня в макросе не полный список  
Код
p = Array("кв\.(\d+)", "\d+[^-]+-(\d+)", "\d+-(d+)")
но он легко дополняется от частных случаев в начале этого массива к все более общим в конце
и на показанных 8 строках эти  Pattern дали 100% результат,
а вообще согласен - во всех непонятных случаях макрос  в качестве № квартиры должен писать Х/З, а не какой-то левый номер, который может быть воспринят, как реальный № квартиры
и мне, как программисту, может быть интересен АБСОЛЮТНЫЙ результат, но как человеку зарабатывающему на жизнь программированием, может быть совершенно неприемлемо время необходимое для достижения абсолютного результата
Изменено: Ігор Гончаренко - 15.04.2020 16:59:38
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
на показанных 8 строках
да, верно. по примеру из исходного моего сообщения все получилось, но я не предполагала, что там дальше все хуже))))))  
 
Цитата
Katerina Larionova написал:
таком хаосном файле
не обойтись без ручного труда на стадии тестирования
100% гарантии нет, но по мере тестирования процент правильных результатов должен стремится к 100%
это не пример нейронной сети, которая может учиться, это пример классического ЖЕСКОГО алгоритма, который реагирует на все что понимает и может СОВЕРШЕННО неадекватно реагировать на непонятные данные
нейронный алгоритм в случае непонятных данных напишет "а это что за хрень?" и попросит у человеческого мозга обьяснить "как это понимать" и включит это "понимание" для всех последущих данных
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
1p = Array("кв\.(\d+)", "\d+[^-]+-(\d+)", "\d+-(d+)")
Простите за тупой вопрос, а  надо как-то это добавить к вашему макросу из примера? или это просто для ответа на сообщение от колелги?  
Изменено: Katerina Larionova - 15.04.2020 16:58:32
 
Katerina Larionova, на самом деле есть один достаточно универсальный подход, который основан на отделении понятного. Часто так делал и делаю.
Фильтрую то что очевидно, например с наличием явного признака кв. и запятую после номера. Использую формулу которая дает однозначный результат и главное точно верный . Фильтрую снова оставив ненайденное …..
Часто после нескольких таких циклов остается несколько десятков совершенно неподдающихся анализу, которые проще руками проставить проанализировав глазами.
По вопросам из тем форума, личку не читаю.
 
это практический способ решения задачи
в начале пишем частные случаи написания № квартиры, а потом все более общие
вы вольны в этот Array написать столько масок поиска, сколько считаете нужным
но есть одна проблема - чтобы написать маску поиска нужно понимать синтаксис Ref.Exp, о написании масок написаны книги  каждая  обьемом не в одну сотню страниц. маска в Reg.Exp это язык программирования и если у вас нет склонности к программированию, писать новые маски будет довольно сложно, если такая склонность есть - то писать маски - чистый кайф, когда в 10-20 символов  написанной маски, вкладывается то, что потребовало бы написания 50-500 строк кода в чистом VB, это не может не завораживать искушенных людей
Изменено: Ігор Гончаренко - 15.04.2020 17:15:01
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
БМВ написал:
основан на отделении понятного
я так и делала сначала. разбивала текст по столбца с разделителем пробел. Вычленила все что содержи "кв", потом удалила явные номера мобильных, потом убрала явные 9 знаковые городские номера  и тд. в итоге осталось разобраться с текстом, который без пробелов между квартирой и телефоном
Страницы: 1
Наверх