PDA

Vollständige Version anzeigen : Elemente eines Strings ausgeben


thomas
05.02.2001, 11:18
Hallo!

Ich habe folgendes Problem:
ich rufe aus einem Formular ein anderes Formular mit "DoCmd.OpenForm '...'" auf und übergebe dabei an der Stelle "OpenArgs" individuelle Parameter (4 um genau zu sein), die jeweils durch ein Semikolon getrennt sind.

Diese Parameter kann ich ja im Ereignis "Open_Form" über me.openArgs abfragen. Jetzt möchte ich diese Parameter auf die entsprechenden Variablen bzw. Felder verteilen.

Gibt es in Access eine Art "entry"-Funktion mit deren Hilfe ich den zusammengebauten String wieder trennen kann?
Ganz nach dem Motto: gib mir den Inhalt an der Stelle 2 (Trennzeichen ";") in die Variable xyz aus...

Schönen Dank schon mal im Voraus und bisdenndann
Thomas

Manuela Kulpa
05.02.2001, 14:01
Hallo Thomas!

*g*, String-Manipulation (*dasmagich*). Anbei ein Beispiel. Die Hauptfunktion ist StringToArray welche deine Inhalte in ein Array schreibt. Um die Anzahl der Wörter bzw. die einzelnen Wörter zu ermitteln, sind noch folgende Unterfunktionen nötig: CountDelimitedWords und GetDelimitedWord. Einen kleinen Test findest du in der Sub TestStringToArray, welche du dann je nachdem in deiner OpenForm-Anweisung umsetzen solltest. Falls du Fragen hast, melde dich!

<font face="Courier New" size="2">Public Function StringToArray( _
sIn As String, _
asIn() As String, _
chrDelimit As String) _
As Long

Dim lCounter As Long
Dim lWordCount As Long

On Error GoTo HandleErr

lWordCount = CountDelimitedWords(sIn, chrDelimit)
ReDim asIn(0 To lWordCount - 1)

For lCounter = 0 To lWordCount - 1
asIn(lCounter) = GetDelimitedWord(sIn, lCounter + 1, chrDelimit)
Next lCounter

StringToArray = lWordCount

ExitHere:
Exit Function

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "basDiverses.StringToArray"
End Select

End Function


Public Function CountDelimitedWords( _
sIn As String, _
chrDelimit As String) _
As Long

Dim lngWordCount As Long
Dim lngPos As Long

On Error GoTo HandleErr

lngWordCount = 1
lngPos = InStr(sIn, chrDelimit)

Do While lngPos > 0
lngWordCount = lngWordCount + 1
lngPos = InStr(lngPos + 1, sIn, chrDelimit)
Loop

CountDelimitedWords = lngWordCount

ExitHere:
Exit Function

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "basDiverses.CountDelimitedWords"
End Select

End Function


Public Function GetDelimitedWord( _
sIn As String, _
ByVal lIndex As Long, _
chrDelimit As String) _
As String

Dim lCounter As Long
Dim lStartPos As Long
Dim lEndPos As Long
Dim sDelimit As String

On Error GoTo HandleErr

lCounter = 1
lStartPos = 1

sDelimit = Left$(chrDelimit, 1)

For lCounter = 2 To lIndex
lStartPos = InStr(lStartPos, sIn, sDelimit) + 1
Next lCounter

lEndPos = InStr(lStartPos, sIn, sDelimit) - 1

If lEndPos <= 0 Then
lEndPos = Len(sIn)
End If

GetDelimitedWord = Mid$(sIn, lStartPos, lEndPos - lStartPos + 1)


ExitHere:
Exit Function

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "basDiverses.GetDelimitedWord"
End Select

End Function

Sub TestStringToArray()

Dim sTmp As String
Dim asTmp() As String
Dim lCount As Long

' String beschreiben
sTmp = "Sonne;Mond;Sterne;Erde"

Erase asTmp
' Convertiert den String in ein Array
lCount = StringToArray(sTmp, asTmp(), ";")

' Informationsanzeige
Debug.Print "StringToArray(): Inhalt '" & sTmp & "' " & _
"ergibt: "
For lCounter = 0 To lCount - 1
Debug.Print asTmp(lCounter)
Next lCounter

End Sub</font>
LLAP