Как разделить строку на составляющие?

RRRulex
Дата: 01.09.2005 15:27:47
Есть такая проблемка, как разделить строку на составляющие?
Например, поле Адрес содержит и индекс, и город, и улицу - как можно всё это разделить на отдельные категории и разложить по соответствующим полям? Т.е. индекс в поле Индекс, город в поле Город и т.д.?
Пользователь2
Дата: 01.09.2005 15:37:25
Почитай здесь и здесь.
LeonM
Дата: 01.09.2005 16:06:37
Option Compare Database
Option Explicit

'LbParse - parse a sentence

Private m_string As String          'a sentence
Private m_separator As String       'a separator of words
Private m_positions As Collection   'set of words

Private Sub Class_Initialize()
    m_string = ""
    m_separator = ""
    Set m_positions = New Collection
End Sub
Private Sub Class_Terminate()
    Set m_positions = Nothing
End Sub
'Delete all positions
Private Sub FreePos()
    Dim i As Long, l As Long
    On Error GoTo NoItem
    l = m_positions.Count
    For i = l To 1 Step -1
        m_positions.Remove i
    Next i
NoItem:
End Sub
Private Function FillPos() As Long
    Dim l As Long, m As Long, i As Long, H As String
    l = Len(m_string)
    m = Len(m_separator)
    For i = 1 To l - m + 1
        H = Mid(m_string, i, m)
        If H = m_separator Then m_positions.Add i
    Next i
    FillPos = m_positions.Count
End Function
'Parsed string
Public Property Get Phrase() As String
    Phrase = m_string
End Property
Public Property Let Phrase(ByVal vNewValue As String)
    FreePos
    m_string = vNewValue
End Property
'Separator
Public Property Get Separator() As String
    Separator = m_separator
End Property
Public Property Let Separator(ByVal vNewValue As String)
    FreePos
    m_separator = vNewValue
End Property
'i-th word in m_string
Public Function Word(i As Long) As String
    Dim n As Long, m As Long, Start As Long, length As Long
    m = Len(m_separator)
    Word = ""
    On Error GoTo NoWords
    If m_positions.Count = 0 Then
        n = FillPos()
    Else
        n = m_positions.Count
    End If
    If i = 1 Then
        Start = 1
        length = m_positions.item(1) - 1
    Else
        If i > n + 1 Then Exit Function
        Start = m_positions.item(i - 1) + m
        If i = n + 1 Then
            length = Len(m_string) - Start + 1
        Else
            length = m_positions.item(i) - Start
        End If
    End If
    Word = Mid(m_string, Start, length)
NoWords:
End Function
'Number of words in m_string
Public Function Words() As Long
    Words = -1
    On Error Resume Next
    If m_positions.Count = 0 Then
        Words = FillPos()
    Else
        Words = m_positions.Count
    End If
    Words = Words + 1
End Function
RRRulex
Дата: 05.09.2005 19:46:01
leonM, ?Спасибо.
TAKOMAK
Дата: 05.09.2005 20:53:32
Приведи пример поля, в котором записаны данные.
eGorkaBy
Дата: 06.09.2005 10:36:21
Класс конечно хороший, но split будет побыстее