webForumDet fria alternativet

Problem i VB

2 svar · 499 visningar · startad av frecko

freckoMedlem sedan dec. 200010 inlägg
#1

Hej.

Någon som vet hur man tar bort specialtecken och sedan räknar dessa som fel? Jag håller på med ett program som rättar fel i VB. Programmet fungerar bra förutom att den inte tar bort specialtecken och inte räknar dessa som fel.

Koden under modulen:

Option Explicit

Private Function rensaBort(str As String, bad As String) As String
rensaBort = Replace(str, bad, "")
End Function

Function checktext(sIn As String) As Collection

Dim AntalFel As Integer
Dim sUt As String
Dim i As Integer
Dim rensaBort As String
'Dim forbidden As Integer

'forbidden = "#¤%&/()§£$\~¨^1234567890"

AntalFel = 0


sIn = LTrim$(sIn) 'Ta bort eventuella onödiga mellanslag till vänster
sIn = RTrim$(sIn) 'Ta bort eventuella onödiga mellanslag till höger

If Left$(sIn, 1) \>= "a" Then 'Kollar om den första bokstaven är liten
    AntalFel = AntalFel + 1 'Det första felet
    sUt = UCase(Left$(sIn, 1)) 'Byter till stor bokstav i ut-stängen
Else
    sUt = sUt & Left$(sIn, 1)
End If

For i = 2 To (Len(sIn) - 1)
    
    If Mid$(sIn, i, 1) \<\> " " And Mid$(sIn, i, 1) \<\> "," Then
        sUt = sUt & Mid$(sIn, i, 1) 'Kopiera till ut-strängen, mellanslag eller komma tecken
    Else
    
    If Mid$(sIn, i, 1) = " " Then
           If Mid$(sIn, i + 1, 1) \<\> " " Then
           sUt = sUt & Mid$(sIn, i, 1) 'Mellanslag på rätt ställe
           Else
           AntalFel = AntalFel + 1 'Dubbla mellanslag
           End If
        End If

        If Mid$(sIn, i, 1) = "," Then
           If Not Mid$(sIn, (i + 1), 1) \<\> " " Then 'Kollar så att det är mellanslag efter komma

                sUt = sUt & ","
           Else
                sUt = sUt & ", " 'Korrekt användande av kommastecken
                AntalFel = AntalFel + 1
           End If
        End If
    End If
Next i

If Right(sIn, 1) = "." Or Right$(sIn, 1) = "!" Or Right$(sIn, 1) = "?" Then
    sUt = sUt & Right$(sIn, 1) 'Korrekt meningsslut
Else

    AntalFel = AntalFel + 1
    sUt = sUt & Right$(sIn, 1) & "." 'EJ korrekt meningsslut
    
End If

Set checktext = New Collection
checktext.Add AntalFel, "AntalFel"
checktext.Add sUt, "Sut"

End Function

Koden under form:

Option Explicit

Private Sub Command1_Click()

Dim svar As Collection 'skapar en collection
Set svar = checktext(Text2.Text)

Text1.Text = svar.Item("AntalFel") 'Skriver ut antal fel i textboxen
Text3.Text = svar.Item("sUt") 'Skriver ut svaret i textboxen

Set svar = Nothing 'Inget svar

End Sub

Private Sub Command2_Click()

Text1.Text = "" 'Rensar fälten
Text2.Text = "" 'Rensar fälten
Text3.Text = "" 'Rensar fälten

End Sub

------------------
Fredrik

fredrikMedlem sedan dec. 19991 072 inlägg
#2

Ett tips för att söka efter otillåtna teckan är att använda Reguljära Uttryck som du refererar in med "MS VBScript Regular Expressions".

Du kan läsa mer om hur du använder det här: http://msdn.microsoft.com/scripting/default.htm?/scripting/vbscript/doc/jsgrpregexpsyntax.htm

------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
http://server.webwerkstaden.se/fredde/

freckoMedlem sedan dec. 200010 inlägg
#3

Tack.

Men fungerar det inte med något liknande som:
Dim AntalFel As Integer
Dim sUt As String
Dim i As Integer
Dim ch As Integer
Dim forbiddenChars As String

forbiddenChars = ("!@#$%^&\*()\_+=/""{\[\]¤1234567890")

For ch = 1 To Len(forbiddenChars)
forbiddenChars = Replace(AntalFel, Mid$(forbiddenChars, ch, 1), "")
Next ch

AntalFel = 0

Fredrik

------------------
Fredrik

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)