kyrons Ответов: 2

Как отделить алфавит и число от буквенно-цифрового текста в VB.NET


У меня есть база данных ms access с таблицей "pop", и внутри таблицы есть 3 столбца: первый столбец с именем "itemnumber", который содержит алфавит и цифры (например, sdfddf-12454), второй столбец с именем "itemalphabet" и третий столбец с именем "itemnumeric". Столбец "itemalphabet" будет местом назначения для извлеченных алфавитов и других символов из столбца "itemnumber" (например, sdfddf -), а столбец "itemnumeric" будет местом назначения для извлеченных чисел из столбца "itemnumber" (например, 12454). У меня есть 1 кнопка с именем "separate", которая будет выполнять код для разделения.

Ожидаемые результаты иллюстрации при нажатии отдельной кнопки:

| itemnumber | itemalphabet | itemnumeric |
|-------------------------------------------
|sdfddf-12454 | sdfddf- | 12454
|asddfs*7822 | asddfs* | 7822

Вот мой код для копирования всего алфавита и других символов в столбец с именем "itemalphabet":

psipopconnection()
       psipoprec = New ADODB.Recordset

       With psipoprec
           .Open("update  pop set itemalphabet=([itemno] ,'(?:[0-9]+\.?[0-9]*|\.[0-9]+)')", psipopcon, 2, 3)

           .Update()
       End With


Вот также мой код для копирования всех чисел в столбец с именем "itemnumeric":
psipopconnection()
        psipoprec = New ADODB.Recordset

        With psipoprec
            .Open("update  pop set itemnumeric=([itemno], '(-\D)')", psipopcon, 2, 3)

            .Update()
        End With


Что я уже пробовал:

Я попробовал эти коды выше, но мне не повезло получить то, что я хочу.

Leo Chapiro

Пожалуйста, проверьте название вашего вопроса: действительно ли вам нужно отделять алфавит и цифру от буквенно-цифрового текста в VB.NET или, скорее, в MS Access?

kyrons

Спасибо _dude за разъяснение. Чего я действительно хочу, так это использовать vb.net проект с одной (1) кнопкой в форме visual basic я хочу отделить алфавит и число друг от друга.

2 Ответов

Рейтинг:
12

Maciej Los

Похоже, вы используете VB/VBA вместо VB.NET-да...

Если я прав, то ты в тралбле, потому что Двигатель МС доступ не поддерживающий регулярное выражение- Есть несколько альтернатив:
1. Вы можете использовать строковая функция[^] чтобы разделить строку на части, например:
ЛЕВЫЙ()[^]
Инстр()[^]
ПРАВО()[^]

2. Вы можете написать пользовательскую функцию в базе данных MS Access (используя VBA), а затем использовать ее в своем запросе. Видеть:
Взломать 54. Использование регулярных выражений в запросах доступа[^]
Регулярные выражения в MS Access[^]

Примечание: код, который ссылается на пользовательскую функцию, должен быть вызван и выполнен на уровне базы данных!

Но(!) им было бы гораздо проще пользоваться VB.NET...

[РЕДАКТИРОВАТЬ]
Что касается 1-й части моего ответа. Вот как вы можете этого добиться:

SELECT t.itemnumber, LEFT(t.itemnumber, IIF(InStr(1, t.itemnumber, "*", 1) =0, InStr(1, t.itemnumber, "-", 1), InStr(1, t.itemnumber, "*", 1))) As itemalphabet, RIGHT(t.itemnumber, LEN(t.itemnumber) - IIF(InStr(1, t.itemnumber, "*", 1) =0, InStr(1, t.itemnumber, "-", 1), InStr(1, t.itemnumber, "*", 1))) As itemnumeric
FROM test As t
WHERE t.itemnumber LIKE "*[0-9]";


Leo Chapiro

Извините, что говорю это, Мацей, но VBA действительно поддерживает регулярное выражение, я лично использовал его ofter, посмотрите, например https://stackoverflow.com/questions/3770672/regular-expressions-in-ms-access-vba/3770828

Maciej Los

Я не говорил, что VBA не поддерживает регулярные выражения. Я уже говорил, что MS Access database engine его не поддерживает. Вторая часть моего ответа предлагает использовать макрос VBA для разделения строки на части.
Вы не очень внимательно прочитали мой ответ... ;(
Кстати: Ваш ответ не связан с вопросом OP, потому что OP использует регулярные выражения в ADODB.Recordset, но - как я уже сказал - база данных MS Access (даже через OleDb-провайдер) их не поддерживает.

Leo Chapiro

Я хочу указать на название вопроса ОП: "как отделить алфавит и число от буквенно-цифрового текста в VB.NET". Именно на этот вопрос я и ответил :)

Dave Kreskowiak

На самом деле VBA поддерживает регулярные выражения через библиотеки VBScript. Вы можете установить ссылку на "Microsoft VBScript Regular Expressions 5.5", и вы внезапно добавили поддержку регулярных выражений в свой код VBA.

kyrons

Спасибо за ваши усилия, Мацей Лос. Куда именно положить код? Это в запросе Dataset TableAdapter или просто внутри кода кнопки: Private Sub Buttonseparate_Click(отправитель как система.Объект, как система.EventArgs) Обрабатывает Buttonseparate.Щелчок

Рейтинг:
1

Leo Chapiro

Вам нужно использовать .Чистая регулярных выражений.
С помощью этой техники будет легко отделить цифры от буквенно-цифровых символов: вы перебираете все символы и проверяете, соответствует ли текущий символ шаблону типа [0-9]!