[VB] Postcode lettercontrole

Pagina: 1
Acties:

  • Benadski
  • Registratie: November 2001
  • Laatst online: 11-08 20:35
De onderstaande code is door iemand anders geschreven, het probleem hierbij is dat bijvoorbeeld D5 of X@ ook door de test heenkomen als "goede" poscodeletters.

code:
1
2
3
4
5
6
7
Private Function IsAlpha(s As String) As Boolean
    If s >= "AA" And s <= "ZZ" Then
        IsAlpha = True
    Else
        IsAlpha = False
    End If
End Function


Hieronder heb ik mijn eigen code gezet, maar die werkt ook niet... Wat doe ik fout?!? (Ik heb ook de controle toegevoegd om te kijken of het wel twee letters zijn).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Function IsAlpha(s As String) As Boolean
    Dim Let1, Let2
    If Not Len(s) = 2 Then
        IsAlpha = False
        Exit Function
    End If
    Let1 = Mid(s, 0, 1)
    Let2 = Mid(s, 1, 1)
    If Let1 >= "A" And Let1 <= "Z" Then
        If Let2 >= "A" And Let2 <= "Z" Then
            IsAlpha = True
        Else
            IsAlpha = False
        End If
    Else
        IsAlpha = False
    End If
End Function


Ja, het is voor school, geen proefwerk of tentamen ofzo (die heb ik niet, praktijkopleiding). Mijn opdracht is het debuggen van een databaseprogramma door andere klasgenoten geprogrammeerd... Het programma bestaat uit ongeveer 500 A4 tjes-code, dus ik heb verder nog werk zat. Kom hier alleen ff niet uit...

Verwijderd

Kan je niet beter de Asc functie gebruiken en dan >= 65 (= "A") en <= 90 (="Z") per letter ?

Verwijderd

en let even op de mid() functie....


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Function IsAlpha(s As String) As Boolean
    Dim Let1, Let2
    If Not Len(s) = 2 Then
        IsAlpha = False
        Exit Function
    End If
    Let1 = Mid(s, 1, 1)
    Let2 = Mid(s, 2, 1)
        If Asc(Let1) >= Asc("A") And Asc(Let1) <= Asc("Z") Then
        If Asc(Let2) >= Asc("A") And Asc(Let2) <= Asc("Z") Then
            IsAlpha = True
        Else
            IsAlpha = False
        End If
    Else
        IsAlpha = False
    End If
End Function

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

Misschien een stomme vraag, maar heeft VB geen regexps?
code:
1
return /^[a-z]{2}$/i

*insert signature here


  • Benadski
  • Registratie: November 2001
  • Laatst online: 11-08 20:35
Verwijderd schreef op 01 november 2002 @ 13:52:
en let even op de mid() functie....


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Function IsAlpha(s As String) As Boolean
    Dim Let1, Let2
    If Not Len(s) = 2 Then
        IsAlpha = False
        Exit Function
    End If
    Let1 = Mid(s, 1, 1)
    Let2 = Mid(s, 2, 1)
        If Asc(Let1) >= Asc("A") And Asc(Let1) <= Asc("Z") Then
        If Asc(Let2) >= Asc("A") And Asc(Let2) <= Asc("Z") Then
            IsAlpha = True
        Else
            IsAlpha = False
        End If
    Else
        IsAlpha = False
    End If
End Function
ARGHHH!!! String begint met positie 1 ipv. 0 dus.... HET WERKT!!! _/-\o_

Zal wel niet de netste manier zijn, maargoed... Ik ben blij :)

Zijn er trouwens trucjes om dat soort dingen snel te debuggen?!?

EDIT: Waarvoor heb je die Asc() ertussen gezet eigenlijk? Is dat beter/sneller?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Benadski schreef op 01 november 2002 @ 14:28:
Zijn er trouwens trucjes om dat soort dingen snel te debuggen?!?
Breakpoint zetten :) (leer je ontwikkelomgeving kennen)

En uh nee VB kent helaas niet standaard regexpressies, heb je ik dacht het VBscript object voor nodig.

Exact expert nodig?


  • E-RIC
  • Registratie: November 2000
  • Laatst online: 19:28
Benadski schreef op 01 november 2002 @ 14:28:
Zal wel niet de netste manier zijn, maargoed... Ik ben blij :)

EDIT: Waarvoor heb je die Asc() ertussen gezet eigenlijk? Is dat beter/sneller?
Dmv die Asc functie weet je zeker dat je alleen de ABC..Z te pakken hebt. Volgens mij zou het ook zonder moeten werken.
Dit vind ik trouwens er wat mooier uit zien:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Function IsAlpha(s As String) As Boolean
    Dim Let1 As String, Let2 As String
    Let1 = Mid(s, 1, 1)
    Let2 = Mid(s, 2, 1)
    let IsAlpha = False

    If Len(s) = 2 Then
        If Asc(Let1) >= Asc("A") And Asc(Let1) <= Asc("Z") _
        And Asc(Let2) >= Asc("A") And Asc(Let2) <= Asc("Z") Then
            Let IsAlpha = True
        End If
    End If
End Function

[ Voor 0% gewijzigd door E-RIC op 01-11-2002 14:51 . Reden: end if - je vergeten + flase > false ]


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Jongens.. niet moeilijk doen.. je kunt het ook anders doen.. gebruik de isnumeric functie

dus:

Visual Basic:
1
2
3
4
5
6
7
8
9
'bla bla
Let1 = mid functie... enzo

If not isnumeric Let1 then
     If not isnumeric Let2 then
        IsAlpha=true
        Exit Function

'bla bla


werkt dan ook met !@ tekens... das wel ff lastig...

edit: Ooh ja .. je moet wel je string ff type casten (C++ idee.. maar niet heus) dus Let1 = Mid nog wat .. en dan Let1Num = Cint(Let1) of zo.... ooh jeeeh je krijgt een fout... dan dus If IsError Let1Num = Cint(Let1) then .... tja wat dan he.. :)

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
En uh nee VB kent helaas niet standaard regexpressies, heb je ik dacht het VBscript object voor nodig.
ondersteunt VB native geen regexps? das wel heel jammer dan...
"[0-9]{4}[A-Z]{2}" is toch een stukkie mooier dan zo'n script...

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
VB.NET heeft .NET regex support, welke VB heb je?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Benadski
  • Registratie: November 2001
  • Laatst online: 11-08 20:35
Ehhhhh, VB6, kan dat? Zit nu niet meer op school dus kan het niet meer zien...

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
en buitenlandse postcodes dan ? :)

Verwijderd

pkouwer schreef op 01 november 2002 @ 18:46:
en buitenlandse postcodes dan ? :)
Die heb je niet in nederland :+

  • Benadski
  • Registratie: November 2001
  • Laatst online: 11-08 20:35
Is het commando asc("A") eigenlijk hetzelfde als vbKeyA?!?

Hmm... denk inderdaad niet dat een dierenambulance aan de noordzee iets heeft aan buitenlandse postcodes... Misschien dat ze buitenlandse leveranciers hebben, maar ook dat lijkt me sterk.

Wie weet trouwens een mooie help met voorbeelden te vinden over VSflexgrids? Ik kan er namelijk niet achter komen hoe ik vanuit een ander venster de zojuist toegevoegde / gewijzigde row kan selekteren... Nu overschrijft het wel steeds de goede gegevens in de DB, maar het grid zelf is een zooitje. ;(

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

zoepercavia schreef op 01 november 2002 @ 16:04:
[...]
ondersteunt VB native geen regexps? das wel heel jammer dan...
"[0-9]{4}[A-Z]{2}" is toch een stukkie mooier dan zo'n script...
Daar zou ik dan eerder "[1-9][0-9]{3} ?[A-Z]{2}" of zo van maken. De eerste Nederlandse postcode die begint met een 0 moet ik nog tegenkomen...

With the light in our eyes, it's hard to see.

Pagina: 1