Avatar billede kahl Mester
21. juni 2016 - 10:23 Der er 7 kommentarer

ændre tegn basseret på ASCII kode

Hej

Jeg søger en løsning hvor på jeg kan udskifte et tegn i en streng, hvis dens værdi er uden for et bestemt område. indtil videre kan jeg loppe igennem hele strengen og i Debuggeren udskrive deres kode via

                For i = 1 To Len(Name)
                    Debug.Print Asc(Mid(Name, i, 1))
                Next

men jeg kunne godt tænke mig at hvis den fandt et tegn der var uden for området 32-126 skal den ændre tegnet i strengen til _

jeg er godt klar over at vi skal ud i noget hvis Aci(i) ikke er mellem 32 og 126 ændre tegnet til _ men jeg kan ikke gennemskue hvordan jeg lige gør det.

Det bruges i Outlook til at gemme mails. <Name> indeholde modtagelses dato, Modtagers Navn/initialer, afsenderes Navn/initialer og Mailens Emne (det er heri folk desværre har fundet ud af lave alt muligt spændende!!)
Avatar billede terry Ekspert
21. juni 2016 - 10:42 #1
Avatar billede terry Ekspert
21. juni 2016 - 10:45 #2
Oops that's .net nut there should be a built in replace function in Outlook vba
Avatar billede kahl Mester
21. juni 2016 - 11:21 #3
Tror jeg selv fandt løsningen i dette.

                    For i = 1 To Len(Name)
                    AsK = Asc(Mid(Name, i, 1))
                    If AsK > 126 Or AsK < 32 Then Name = replace(Name, Mid(Name, i, 1), "_")

Kom fortsat gerne med input
Avatar billede terry Ekspert
21. juni 2016 - 13:26 #4
You dont actually need Ask

For i = 1 To Len(Name)
    If Asc(Mid(Name, i, 1)) > 126 Or Ask < 32 Then
      Name = Replace(Name, Mid(Name, i, 1), "_")
    End If
Next i
Avatar billede terry Ekspert
21. juni 2016 - 13:26 #5
For i = 1 To Len(Name)
If Asc(Mid(Name, i, 1)) > 126 Or Asc(Mid(Name, i, 1)) < 32 Then
Name = Replace(Name, Mid(Name, i, 1), "_")
End If
Next i
Avatar billede kahl Mester
21. juni 2016 - 13:46 #6
I know men da ÆØÅ ikke lå inden for det range var jeg begyndt at arbejde videre på projektet inden jeg fik skrevet min løsning herinde. og der giver den mening at have.
Avatar billede arne_v Ekspert
05. juli 2016 - 04:17 #7
Gammelt spoergsmaal men en kommentar.

Jeg ville lave det uden Replace.

Demo:


Function Sanitize(s As String) As String
    Dim res As String
    Dim i As Integer
    Dim c As Integer
    res = s
    For i = 1 To Len(res)
        c = Asc(Mid(res, i, 1))
        If ((c >= 32) And (c <= 126)) Or (InStr("ÆØÅæøå", Chr(c)) > 0) Then
            ' leave as is
        Else
            Mid(res, i, 1) = "_"
        End If
    Next i
    Sanitize = res
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester