Dateinamen auf Aufbau überprüfen und falls nötig korrigieren

intermde

Grünschnabel
Hallo,

ich habe eine Access Datei über welche per VBA
Ordner Dateien auf Ihren Namen prüfen lasen möchte und falls gewisse Kriterien erfüllt sind erweitern/anpassen.

Die Dateien können entweder den Aufbau haben
1. xxxxxxxx_xxxxxxx_wgewgg_ewgewgw_gwgw_gwg (x sind Zahlen), 8 Zahlen _ 7 Zahlen _Wörer getrennt jeweils mit einem "_" (Unterstrich)
2. xxxxxxxx_xxxxxxx_CUPS-Error_hgerhrh_herhr_herhe_heh

woebei CUPS-Error unterschiedlich geschrieben sein kann
CUPS-Error, CUPS_Error, CUPS-error, CUPS_error, cups-error,c ups_error ect..

nun möchte ich folgendes Prüfen bzw. anpassen

Falls die Datei das Wort ....CUPS... enthält ersetze alles zwischen dem 2. "_" und 3. "_" (Unterschrich) mit dem Wort CUPS-Error
Aus
xxxxxxxx_xxxxxxx_CUPS_Eror_hgerhrh_herhr_herhe_heh wird
xxxxxxxx_xxxxxxx_CUPS-Error_hgerhrh_herhr_herhe_heh

Sollte das Wort CUPS nicht enthalten sein schreibe anstatt dem 2. "_" (Unterschrich) das Wort "_CUPS-Errror_".
Aus
xxxxxxxx_xxxxxxx_wgewgg_ewgewgw_gwgw_gwg wird
xxxxxxxx_xxxxxxx_CUPS-Error_wgewgg_ewgewgw_gwgw_gwg

Vielleicht kann mir hier jemand wegen meinen Problem helfen.
 

Yaslaw

alter Rempler
Moderator
Reguläre Ausdrücke sind die einfachste Lösung: https://msdn.microsoft.com/en-us/library/1400241x(v=vs.84).aspx

Ich habe mal ein Pattern zusammengestellt. Hier geht's zur Spielwiese: https://regex101.com/r/qF955A/1

Und das Ganze angewandt:
Visual Basic:
Public Function correctFileName(ByVal iFileName As String) As String
    'Pattern und Replace String definieren
    Const C_PATTERN = "^(\d{8}_\d{7}_)(?:CUPS[^_]+_)?(\S+)$"
    Const C_REPLACE = "$1CUPS-ERROR_$2"
  
    'RegExp Objekt anlegen
    Dim rx As Object
    Set rx = CreateObject("VBScript.RegExp")
    rx.pattern = C_PATTERN
  
    'Dateinamen übernhemen
    correctFileName = iFileName
  
    'Prüfen ob der Dateiname dem Pattern entspricht und ggf den Namen parsen
    If rx.Test(correctFileName) Then correctFileName = rx.replace(correctFileName, C_REPLACE)
End Function

Test im Direktfenster:
Code:
?correctFileName("12345678_1234567_wgewgg_ewgewgw_gwgw_gwg")
12345678_1234567_CUPS-ERROR_wgewgg_ewgewgw_gwgw_gwg

?correctFileName("12345678_1234567_CUPS-Err_hgerhrh_herhr_herhe_heh")
12345678_1234567_CUPS-ERROR_hgerhrh_herhr_herhe_heh