Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: controle van een string op verboden tekens \ / : * ? " < >

601 views
Skip to first unread message

NOSPAM@skynet.be Cobbe

unread,
Mar 16, 2008, 9:26:41 AM3/16/08
to
Duurt deze ook te lang?

string = InputBox("Bestandsnaam aub :")
fout = "\/:*?<>"
For I = 1 To Len(naam)
If InStr(1, fout, Mid(string, I, 1)) > 0 Then
MsgBox ("Fout teken gebruikt op positie : ") & I
Exit Sub
End If
Next

Cobbe

Op 16/03/2008, heeft Jan B. verondersteld :
> Excellers,
>
> ik maak met een inputbox een bestandsnaam en zet die in een string:
> string = inputbox("bestandsnaam")
>
> deze string mag dus de volgende tekens niet bevatten:
> \ / : * ? " < > |
>
> Om dit te prgrammeren in VBA is het niet wenselijk om de functie "Instr" te
> gebruiken, deze kan slechts één karakter tegelijk opzoeken. De code wordt
> daardoor traag en lang.
>
> Iemand een idee hoe dit zo efficiënt mogelijk kan worden geprogrammeerd ?
> Alvast bedankt voor het meedenken.


emil

unread,
Mar 16, 2008, 9:36:50 AM3/16/08
to
zoiets?
Sub test()
Dim aTmp As Variant
Dim lTmp As Long
Dim sTmp As String

aTmp = Array("\", "/", ":", "*", "?", Chr(34), "<", ">", "|")
sTmp = "a\" & Chr(34) & "/:b*?<>|c"

For lTmp = LBound(aTmp) To UBound(aTmp)
sTmp = Replace(sTmp, aTmp(lTmp), "")
Next

MsgBox sTmp
End Sub


--
groet, emil
<getest met office2000NL>

"Jan B." <jbronzwaer(dit weglaten)@home.nl> schreef in bericht
news:142F55F5-64F4-4455...@microsoft.com...
Excellers,

ik maak met een inputbox een bestandsnaam en zet die in een string:
string = inputbox("bestandsnaam")

deze string mag dus de volgende tekens niet bevatten:
\ / : * ? " < > |

Om dit te prgrammeren in VBA is het niet wenselijk om de functie "Instr" te
gebruiken, deze kan slechts één karakter tegelijk opzoeken. De code wordt
daardoor traag en lang.

Iemand een idee hoe dit zo efficiënt mogelijk kan worden geprogrammeerd ?
Alvast bedankt voor het meedenken.

--
met vriendelijke groet,
Jan B.


Jan B.

unread,
Mar 16, 2008, 10:25:01 AM3/16/08
to
Emil,

dat is de oplossing.
Bedankt voor je reactie

--
met vriendelijke groet,
Jan B.


"emil" schreef:

Jan B.

unread,
Mar 16, 2008, 10:24:00 AM3/16/08
to
Beste Cobbe,

De routine werkt goed doch, zoals ik al vreesde, is het niet mogelijk om in
de variabele 'fout' het aanhalingsteken op te nemen. En dat is helaas ook een
niet-toegestaan karakter voor een filenaam.
De andere oplossing van emil werkt met een array en maakt dit wel mogelijk.

Dank voor je reactie.

--
met vriendelijke groet,
Jan B.


"Cobbe" schreef:

NOSPAM@skynet.be Cobbe

unread,
Mar 16, 2008, 10:29:05 AM3/16/08
to
Tja, dan hoef je ook niet te betalen hé :)
Cobbe

Jan B. plaatste dit op zijn scherm :

jan

unread,
Mar 16, 2008, 1:18:28 PM3/16/08
to
Jan,

Wat laat toch nog een aardige mogelijkheid:

Sub TestOpTeken(strBestandsnaam)
If strBestandsnaam Like "*" & "[\/:* ?"" <>|]" & "*" Then
MsgBox "De bestandsnaam bevat één of meer ongeldige tekens"
End If
End Sub

Overigens kan in de oplossing van Cobbe wel worden getest op aanhalingstekens door
in de fout-string twee aanhalingstekens op te nemen:

fout = "\/:*""?<>"

Jan


NOSPAM@skynet.be Cobbe

unread,
Mar 16, 2008, 2:12:13 PM3/16/08
to
Dus toch betalen! :)

jan was zeer hard aan het denken :

Jan B.

unread,
Mar 16, 2008, 5:50:01 PM3/16/08
to
Jan,

je gebruikt de [ en ] in "Like" om een groep tekens aan te geven. Dat is
mooi maar helaas krijgt de routine hierdoor weer een niéuw gebrek erbij:
zoals je al ziet gaat het erom een bestandsnaam vrij te maken van verboden
tekens. Omdat het om het opslaan van bestanden gaat die een titel krijgen via
een inptbox, gooien die haken roet in het eten: immers een bestandsnaam als
Jan[jan] wordt goedgekeurd en dat mag niet, want bij opslaan volgt een
foutmelding omdat er verboden tekens zijn gebruikt: de haken [ en ]). ik geef
je even de subroutine met jouw oplossing waar het feitelijk om gaat:

Sub invoerbox(Msg$, Title$, tekst$)
a = inputbox(Msg, Title, tekst)
If a Like "*" & "[\/:* ?""<>|]" & "*" Then


MsgBox "De bestandsnaam bevat één of meer ongeldige tekens"

a = inputbox(Msg, Title, a)
End If
tekst = a
End Sub

hoe kan ik nu binnen die Like-constructie ook de haken [ en ] opnemen ?
Zie jij nog iets ?

--
met vriendelijke groet,
Jan B.


"jan" schreef:

Jan B.

unread,
Mar 16, 2008, 5:58:00 PM3/16/08
to
Beste Cobbe,

je vindingrijkheid wordt door jan (die andere) loffelijk aangevuld met een
oplossing voor het door mij geopperde bezwaartje (allemaal onkunde van mijn
kant) over het aanhalingsteken, dat dus niet zo bezwaarlijk blijkt te zijn en
waarover je niet repte omdat je natuurlijk dacht: die Jan B. snapt dat wel.
Wist ik toch zoveel van Excel als Cobbe, denk ik weleens, dan was het leven
een stuk gemakkelijker.
Je ziet hoeveel men je respecteert, evenals ik dat doe, want ondertussen ren
jij hier maar filantropisch rond om mensen te helpen, als geen ander. Chapeau.
Je bent je gewicht in goud waard, echter op dit forum mag helaas niet met
geld worden geschoven, Ik moet je dus financieel teleurstellen: ik mág je
niet eens betalen :)

mijn dank is echter groot.

--
met vriendelijke groet,
Jan B.


"Cobbe" schreef:

emil

unread,
Mar 16, 2008, 7:36:37 PM3/16/08
to
uit de help:
<q>
Opmerking U kunt de speciale tekens linker vierkant haakje ([), vraagteken
(?), hekje (#) en sterretje (*) alleen gebruiken om zichzelf aan te duiden
wanneer u deze tekens tussen vierkante haakjes plaatst. U kunt het rechter
vierkante haakje (]) niet letterlijk in een groep gebruiken, maar wel als
afzonderlijk teken buiten een groep.
</q>

--
groet, emil
<getest met office2000NL>

"Jan B." <jbronzwaer(dit weglaten)@home.nl> schreef in bericht

news:5D585E77-B92A-41CA...@microsoft.com...

Jan B.

unread,
Mar 16, 2008, 8:22:01 PM3/16/08
to
ik had 't gelezen, emil, maar:
ik snap hier helemaal niks van.

hoe moet de syntax van deze regel luiden om de haken ook te onderscheppen ?


If a Like "*" & "[\/:* ?""<>|]" & "*" Then

't lukt in ieder geval niet alsvolgt:
If a Like "*" & "[\/:* ?""<>|]" & "[" & "]" & "*" Then

--
met vriendelijke groet,
Jan B.


"emil" schreef:

Jan B.

unread,
Mar 16, 2008, 8:46:02 PM3/16/08
to
emil,

If a Like "*" & "[\/:*[?""<>|]" & "*" Or a Like "*" & "]" & "*" Then

is de ultieme oplossing, denk ik .
mee eens ?

het kwartje is gevallen.

--
met vriendelijke groet,
Jan B.


"emil" schreef:

jan

unread,
Mar 17, 2008, 3:17:52 AM3/17/08
to
Jan,

Dat lijkt inderdaad de oplossing.
Hieronder de code met daarin de vraag of je de tekens wilt laten verwijderen:

Sub TestOpTeken(strBestandsnaam)
Dim strFout As String
Dim i As Integer
strFout = "[\/:*?""<>|"
If strBestandsnaam Like "*[" & strFout & "]*" Or strBestandsnaam Like "*]*" Then
If MsgBox("De bestandsnaam bevat één of meer ongeldige tekens" _
& vbNewLine & "Wilt u die tekens verwijderen?", vbQuestion +
vbYesNo, _
"Ongeldige tekens") = vbYes Then
For i = 1 To Len(strFout) + 1
strBestandsnaam = Replace(strBestandsnaam, Mid("]" & strFout, i, 1), "")
Next
End If
End If
MsgBox strBestandsnaam
End Sub


Jan


Jan B.

unread,
Mar 17, 2008, 6:22:00 AM3/17/08
to
Jan,

nu is het plaatje compleet, geloof ik.
Bedankt voor het meedenken.

--
met vriendelijke groet,
Jan B.


"jan" schreef:

> Jan,

0 new messages