Разбор текста в MS Access - PullRequest
       23

Разбор текста в MS Access

1 голос
/ 01 октября 2008

У меня есть столбец, который содержит строки. Строки в этом столбце выглядят так:

FirstString / SecondString / ThirdString

Мне нужно разобрать это, поэтому у меня есть два значения:

Значение 1: FirstString / SecondString Значение 2: ThirdString

Я мог бы иметь на самом деле более длинные строки, но я всегда нуждался в том, чтобы они разделялись как [string1 / string2 / string3 / ...] [stringN]

Что мне нужно, чтобы закончить это:

Столбец1: [строка1 / строка2 / строка3 / и т. Д ....] Столбец2: [строкаN]

Я не могу найти доступ к этому. Какие-либо предложения? Нужны ли регулярные выражения? Если так, есть ли способ сделать это в конструкторе запросов?

Обновление : оба выражения дают мне такую ​​ошибку: «Введенное вами выражение содержит недопустимый синтаксис, или вам необходимо заключить текстовые данные в кавычки».

expr1: Left( [Property] , InStrRev( [Property] , "/") - 1), Mid( [Property] , InStrRev( [Property] , "/") + 1)

expr1: mid( [Property] , 1, instr( [Property] , "/", -1)) , mid( [Property] , instr( [Property] , "/", -1)+1, length( [Property] ))

Ответы [ 4 ]

1 голос
/ 01 октября 2008

В запросе используйте следующие два выражения в качестве столбцов:

Left(col, InStrRev(col, "/") - 1), Mid(col, InStrRev(col, "/") + 1) 

col - это ваша колонка.

Если в VBA, используйте следующее:

last_index= InStrRev(your_string, "/")

first_part= Left$(your_string, last_index - 1)
last_part= Mid$(your_string, last_index + 1)
0 голосов
/ 30 января 2009

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

Тем не менее, стоит упомянуть, что существует регулярное выражение COM-объект, доступный из VBA. Просто добавьте ссылку на библиотеку регулярных выражений Microsoft VBScript внутри кода макроса.

Тогда вы можете делать такие вещи, как это

Dim szLine As String
Dim regex As New RegExp
Dim colregmatch As MatchCollection

With regex
    .MultiLine = False
    .Global = True
    .IgnoreCase = False
End With

szLine = "FirstString/SecondString/ThirdString"

regex.Pattern = "^(.*?\/.*?)/(.*?)$"
Set colregmatch = regex.Execute(szLine)

'FirstString/SecondString
Debug.Print colregmatch.Item(0).submatches.Item(0)
'ThirdString
Debug.Print colregmatch.Item(0).submatches.Item(1)
0 голосов
/ 03 октября 2008

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

0 голосов
/ 01 октября 2008

mid (col, 1, instr (col, "/", -1)), mid (col, instr (col, "/", -1) +1, длина (col))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...