PDA

Vollständige Version anzeigen : String Säubern


0815besucher
08.02.2014, 10:05
Hallo
Möchte bei Click Textfeld1 umwandeln (reinigen)
habe folgenden Code gefunden
Nur komm ich damit nicht klar.
Muss ich den Code in ein Modul oder im Formular speichern?
und wie muss ich mein Textfeld1 einbinden.
Bitte um Hilfe.

Public Function CleanPfadString(Wert As String)

' -----------------------------------------------------------
' Wandelt den mitgegebenen String so um, dass er für einen
' Verzeichnisnammen verwendet werden kann
' -----------------------------------------------------------

Dim T As Integer
Dim Merk As Integer
Dim Zeichen As String

Wert = Trim(Wert)
For T = 1 To Len(Wert)
Zeichen = Mid(Wert, T, 1)
Select Case Zeichen
Case ":", ">", "<", "*", "?", "/", "\", "", "|"
CleanPfadString = CleanPfadString
Case Chr(34)
CleanPfadString = CleanPfadString
Case Else
CleanPfadString = CleanPfadString & Zeichen
End Select
Next T

End Function

Josef P.
08.02.2014, 10:24
Hallo!

Diese Funktion könntest du in eine Standardmodul einfügen.

Der Aufruf aus dem Formular erfolgt z. B. über:
<code>Me.DeinTextfeld.Value = CleanPfadString(Me.DeinTextfeld.Value)</code>

Bevor du diesen Code einsetzt, solltest du die Funktion selbst säubern. ;)

1. Wertübergabe als String, aber Variant-Rückgabe. => Falls auch Null übergeben werden kann, sollte der Parameter auch Variant sein und der Null-Parameter vor der For-Schleife abgefangen werden. (Außderm sollte man den Parameter mit Byval deklarieren.

2. <code>CleanPfadString = CleanPfadString</code> sind unnötige Kopieranweisungen, die kann man auch einfach weglassen.

3. Wenn jedes einzelne Zeichen des übergebenen Textes in der For-Schleife geprüft werden soll, würde ich eventuell die ungültigen Zeichen durch ein Ersatzzeichen (z. B. "_") ersetzen. Dann könnte man mid einsetzen.


' LUFTCODE!
Public Function CleanPfadString(byval Wert As string, Optional byval ErsatzZeichen as string = "_") as String

Dim T As Long
Wert = Trim(Wert)

For T = 1 To Len(Wert)
Select Case Mid$(Wert, T, 1)
Case ":", ">", "<", "*", "?", "/", "\", "", "|", chr(34)
Mid$(Wert, T, 1) = ErsatzZeichen ' ! ErsatzZeichen muss 1 Zeichen lang sein
Case Else
' nichts zu tun
End Select
Next T

CleanPfadString = Wert



BTW: Ich übernahm einfach einmal die Prüfzeichen - allerdings ist "\" bei einem Dateipfad schon erlaubt. (Vielleicht soll mit der Funktion nur ein Dateiname geprüft und korrigiert werden, dann dürfte "\" nicht vorkommen ... allerdings würde ich der Funktion in diesem Fall einen anderen Namen geben.)

Der Fall "" wird übrigens niemals eintreten.
', ´, ` sollten eventuell auch noch ersetzt werden.


Alternative:
Mehrere Replace hintereinander durchlaufen:
Public Function CleanPfadString(ByVal Wert As String, Optional ByVal ErsatzZeichen As String = "_") As String

Dim T As Long

Dim NichtErlaubteZeichen() As Variant
NichtErlaubteZeichen = Array(":", ">", "<", "*", "?", "/", "\", "|", Chr(34), "'", "´", "`")

Wert = Trim(Wert)

For T = LBound(NichtErlaubteZeichen) To UBound(NichtErlaubteZeichen)
Wert = Replace(Wert, NichtErlaubteZeichen(T), ErsatzZeichen, , , vbTextCompare)
Next T

CleanPfadString = Wert

End Function
.. in dieser Funktion werden zwar oft Strings kopiert, dafür kann man auch mehrstellige Strings ersetzen.

mfg
Josef

0815besucher
08.02.2014, 11:21
Hallo
Also perfekter geht es wohl nicht mehr.
Vielen Dank