Usuwanie niedozwolonych znaków w nazwie pliku

Jest to oczywiście nawiązanie do napisanej wcześniej funkcji sprawdzającej czy takie znaki występują (dostępna tutaj). Tym razem wersja konwertująca niedozwolony znak na podkreślenie, bez żadnych komunikatów, wygodna do użycia w pętli itp.

Function SkonwertowanaNazwaPliku(SprawdzanaNazwa As String) As String
    Dim tbl As Variant
    Dim NrZn As Long
    Dim Dlugosc As Long
    Dim Znak As String * 1
    Dim tblZnak As Variant
    Dim NiedozwolonyZnak As Boolean
 
    tbl = Array("#", "%", "&", "*", ":", "<", ">", "?", "/", "\", "{", "|", "}")
    Dlugosc = Len(SprawdzanaNazwa)
    For NrZn = 1 To Dlugosc
        Znak = Mid(SprawdzanaNazwa, NrZn, 1)
        NiedozwolonyZnak = False
        For Each tblZnak In tbl
            If tblZnak = Znak Then
                NiedozwolonyZnak = True
                Exit For
            End If
        Next
        If NiedozwolonyZnak Then
            SkonwertowanaNazwaPliku = SkonwertowanaNazwaPliku & "_"
        Else
            SkonwertowanaNazwaPliku = SkonwertowanaNazwaPliku & Znak
        End If
    Next
End Function

2 myśli w temacie “Usuwanie niedozwolonych znaków w nazwie pliku

  1. Pingback: Akademia VBA » Niedozwolone znaki w nazwie pliku

  2. A nie lepiej zastosować Replace? Kod jest wówczas znacznie krótszy, bo nie wykonuje pętli po wszystkich znakach. Ja dodatkowo używam tablicy zamienników, co przy zamianie wszystkich znaków na podkreślenie jest oczywiście zbędne:


    Function ZamZnakiNiedozwolone(wejString As String) As String

    Dim iCounter As Integer
    Dim tblZabr As Variant
    Dim tblZam As Variant

    tblZabr = Array("#", "%", "&", "*", ":", "<", ">", "?", "/", "\", "{", "|", "}")
    tblZam = Array("(hash)", "proc", "and", "", "", "", "", "", "", "", "", "", "")

    For iCounter = LBound(tblZabr) To UBound(tblZabr)
    wejString = Replace(wejString, tblZabr(iCounter), tblZam(iCounter))
    Next iCounter

    ZamZnakiNiedozwolone = wejString

    End Function

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *