Microsoft Access: удаление телефонных номеров из каналов, которые повсюду - PullRequest
0 голосов
/ 22 апреля 2019

В Microsoft Access я получаю поток телефонных номеров, которые необходимо обработать и согласовать в стандартном формате для последующей обработки в другой системе.Числа, которые мне даны, повсюду.Они являются международными из многих стран, могут включать специальные символы, пробелы, символы скобки, буквы, некоторые имеют расширения, в то время как другие не имеют и не все имеют коды города.Несмотря на все это, мне нужно одинаково отформатировать его по всем номерам.Вот то, на что я смотрю ...

Ex.

+1_(860)_5666344_x_4454  <--- All _'s are spaces in the string

Convert To

8605666344

Видите ли, мы должны учитывать такие особые соображения, как:

1) Международные номера, код страны может быть любым.Так, например, код страны США +1, но код города 246 может выглядеть так, как будто это код страны +1 246 для Барбадоса, хотя в действительности это код страны США (246).Мне нужно учесть это

2) Мне нужно удалить все специальные символы, пробелы, буквы (расширение X), парены

3) Мне нужно удалить все расширения, которые всегда предшествуютс x, хотя не всегда с пробелом после него.

4) В некоторых случаях код города может даже не быть включен.Несмотря на это, должны применяться другие правила (без расширений, без специальных символов, без кода страны и без пробелов)

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вы можете убрать цифры в одной строке:

Phone = "+1 (860) 566-6344 x4454"
CleanPhone = Split(Replace(Replace(Replace(Replace(t, " ", ""), "(", ""), ")", ""), "-", ""), "x")(0)

CleanPhone -> "+18605666344"

Но международный телефонный код, который присутствует, если первым символом является «+», может принимать от 1 до 4 цифр.Таким образом, вы должны найти таблицу из них, чтобы найти совпадение.Их можно найти во многих источниках - один из них здесь:

Википедия: список кодов вызова стран

0 голосов
/ 22 апреля 2019

Согласованность в структуре данных имеет решающее значение для работы со строками.Создайте пользовательскую функцию VBA для обработки этих данных.

Для начала попробуйте вложить функцию Replace (), чтобы удалить символы скобок, s представляет пример строки данных:

Replace(Replace(s,"(",""),")","")

Возьмите это значение и пропустите блок If Then, чтобы проверить наличие символа "x" и, если имеется, усеченную строку.Затем еще один If Then для проверки на наличие символа «+» и, если он есть, удалите префикс.

Используйте функции манипуляции со строками InStr, InStrRev, Mid, Left, Right, Len.Другой Replace () может удалить пробелы или использовать Val ().

Очень простой пример кода, основанный на данных данного примера:

Function ExtractPhoneNum(s As String) As String
Dim strS As String
strS = Replace(Replace(s, "(", ""), ")", "")
If InStr(strS, "x") <> 0 Then strS = Left(strS, InStr(strS, "x") - 1)
If InStr(strS, "+") <> 0 Then strS = Mid(strS, InStr(strS, " ") + 1)
ExtractPhoneNum = Val(strS)
End Function
...