Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Usuwanie niedozwolonych znaków w nazwie pliku

Kategorie: Uniwersalne VBA — Darek Kolasa o 11:24, 28 Lis 2015

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 komentarze »

Pingback- Akademia VBA » Niedozwolone znaki w nazwie pliku

28 Lis 2015 @ 11:43

[…] Przy masowym sprawdzaniu plików komunikat można usunąć, bo będzie przeszkadzał lub zrobić drugi logiczny parametr funkcji i na jego podstawie wyświetlać komunikat lub nie. Taka wersja jest już także dostępna (tutaj) […]

Komentarz- pallicho

28 Cze 2016 @ 12:36

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

RSS komentarzy do wpisu. Adres trackback

Zostaw komentarz

Dozwolone znaczniki XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>