Funktionsrückgabewert als CASE Ausdrucksliste verwenden

10/07/2009 - 12:37 von Joerg | Report spam
Hallo NG,

jetzt schreibe ich diesen Thread zum dritten mal. Zweimal geschrieben,
kurz in der NG erschienen, dann auf einmal weg. Keine Ahnung warum.
Letzter Versuch über den GoogleGorups-Umweg.

Szenario:
Der Anwender definiert in einem Formular erlaubte Zeichen in einem
bestimmten String. Die Zeichen gibt er ohne Trenner ein, also direkt
aneinander gereiht (z.B. ABzwE). Eine Funktion zerlegt diesen String
dann, baut ihn für eine Case-Ausdrucksliste um ("Wert1",
"Wert2", ...). Anschließend wird mit einer Funktion ein anderer String
darauf geprüft, ob nur diese erlaubten Zeichen vorkommen oder auch
unerlaubte Zeichen verwendet werden.

Vorgehen:
fktUnerlZeichenZerlegt() - Zerlegt den Anwenderstring und bastelt die
Case-Ausdrucksliste
fktUnerlZeichenPruefen() - Prüft einen String anhand der CASE-
Ausdrucksliste, ob unerlaubte Zeichen vorkommen
TestText() - Übergibt zum Testen einen Beispielstring

Code:
siehe unten, kann jederzeit kopiert werden und müsste sofort
funktionieren, mit Ausnahme des folgenden Problems.

Problem:
Zeile 3 bzw. Zeile 4 in fktUnerlZeichenPruefen()
Nimmt man Zeile 3 (Das ist genau der Rückgabewert aus
fktUnerlZeichenZerlegt(), mit debug.print ausgegeben und dann
kopiert), funktioniert alles. Im konkreten Beispiel wird festgestellt,
dass an Stelle 4 des Beispielstrings ein unerlaubtes Zeichen steht.
Nimmt man Zeile 4 funktioniert es nicht, die Funktion gibt immer aus,
dass an erster Stelle ein falsches Zeichen stehen würde.

Kann man die CASE-Ausdrucksliste nicht durch einen
Funktionsrückgabewert definieren???

Wie kann ich das Problem lösen?

Wichtig wàre mir, dass folgende Punkte berücksichtigt bleiben:

- Anwender gibt die erlaubten Zeichen ohne Trenner in ein Formular ein
- Die Prüffunktion nimmt diese Zeichen auf und verarbeitet sie (also
definitiv keine hart gekodete Ausdrucksliste)

Besten Dank und schöne Grüße

Jörg


Function fktUnerlZeichenPruefen(strText As String) As Boolean
Dim intZeichen As Integer

1 For intZeichen = 1 To Len(strText)

2 Select Case Mid(strText, intZeichen, 1)

3 Case "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y",
"Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "'",
"-", "."
4 Case fktUnerlZeichenZerlegt

5 fktUnerlZeichenPruefen = True

6 Case Else

7 fktUnerlZeichenPruefen = False

8 End Select

9 If fktUnerlZeichenPruefen = False Then

10 Debug.Print "Fehler an Stelle: " & intZeichen

11 Exit Function

12 End If

13 Next intZeichen

End Function

Function fktUnerlZeichenZerlegt()
Dim strText As String
Dim a As String
Dim intZeichen As Integer

1 strText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'-."

2 For intZeichen = 1 To Len(strText)

3 a = a & Mid(strText, intZeichen, 1) & Chr(34) & ", " & Chr(34)

4 Next intZeichen

5 fktUnerlZeichenZerlegt = Left(Chr(34) & a, Len(Chr(34) & a) - 3)

End Function

Sub TestText()
Dim strText As String

1 strText = "ABC123456ABC35/67\90ABC"
2 Call fktUnerlZeichenPruefen(strText)

End Sub
 

Lesen sie die antworten

#1 Mark Doerbandt
10/07/2009 - 12:53 | Warnen spam
Hallo, Joerg,

Joerg:

jetzt schreibe ich diesen Thread zum dritten mal. Zweimal geschrieben,
kurz in der NG erschienen, dann auf einmal weg. Keine Ahnung warum.
Letzter Versuch über den GoogleGorups-Umweg.



angekommen - ich sehe ihn allerdings zum ersten mal. Wo und wie hast
Du denn die anderen Versuche gestartet.

Szenario:
Der Anwender definiert in einem Formular erlaubte Zeichen in einem
bestimmten String. Die Zeichen gibt er ohne Trenner ein, also direkt
aneinander gereiht (z.B. ABzwE). Eine Funktion zerlegt diesen String
dann, baut ihn für eine Case-Ausdrucksliste um ("Wert1",
"Wert2", ...). Anschließend wird mit einer Funktion ein anderer String
darauf geprüft, ob nur diese erlaubten Zeichen vorkommen oder auch
unerlaubte Zeichen verwendet werden.

Vorgehen:
fktUnerlZeichenZerlegt() - Zerlegt den Anwenderstring und bastelt die
Case-Ausdrucksliste
fktUnerlZeichenPruefen() - Prüft einen String anhand der CASE-
Ausdrucksliste, ob unerlaubte Zeichen vorkommen
TestText() - Übergibt zum Testen einen Beispielstring

Code:
siehe unten, kann jederzeit kopiert werden und müsste sofort
funktionieren, mit Ausnahme des folgenden Problems.

Problem:
Zeile 3 bzw. Zeile 4 in fktUnerlZeichenPruefen()
Nimmt man Zeile 3 (Das ist genau der Rückgabewert aus
fktUnerlZeichenZerlegt(), mit debug.print ausgegeben und dann
kopiert), funktioniert alles. Im konkreten Beispiel wird festgestellt,
dass an Stelle 4 des Beispielstrings ein unerlaubtes Zeichen steht.
Nimmt man Zeile 4 funktioniert es nicht, die Funktion gibt immer aus,
dass an erster Stelle ein falsches Zeichen stehen würde.

Kann man die CASE-Ausdrucksliste nicht durch einen
Funktionsrückgabewert definieren???



Hier liegt Dein Problem, das geht so nicht. Warum scheibst Du nicht
eine Funktion, die einfach True oder False zurück gibt, statt das Case
zu verwenden? Oder einfach mit InStr arbeiten.

If InStr(fktUnerlZeichenZerlegt, Mid(strText, intZeichen, 1))> o Then

Gruss - Mark

Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen