Ich arbeite gerade aus Spass an der Freud' an einem "Umbenenner" für Dateinamen wie er ähnlich auch im TotalCommander mit dem
"Mehrfach-Umbenenn-Tool" realisiert ist. Die Idee entstand, da ich in diesem Modul vielerlei Möglichkeiten der "Manipulation" vermisst
habe. Ein grober Rahmen existiert schon und funktioniert soweit auch - ist allerdings nur reines "Studien-Programm" ohne große
Struktur und noch mit jedermenge Fehlerchen.
Ich mache mir jedoch jetzt schon Gedanken bezüglich der Performance und dachte, ihr könntet mir bei der Optimierung einiger
Proceduren / Funktionen helfen. Eine der wichtigsten Funktionen wäre da das Ersetzen von Platzhalter, die der Benutzer vorgibt.
Beispiel:
Aus dem Dateinamen
"Frank Zappa - You Are What You Is - Society Pages.mp3"
wir mittels der vorgegebenen Maske
"[N7-11], [N-5][N12-]"
der neue Dateiname
"Zappa, Frank - You Are What You Is - Society Pages.mp3"
...[N7-11] = "Zappa"
...[N-5] = "Frank"
...[N12-] = "You Are What You Is - Society Pages.mp3"
Im Moment sieht meine vorläufige Lösung folgendermaßen aus...
Code: Alles auswählen
dateiname.s = "Frank Zappa - You Are What You Is - Society Pages.mp3"
usermaske.s = "[N7-11], [N1-5][N12-]"
;Schleife durchlaufen, solange der Platzhalter "[N" vorhanden ist
While FindString(usermaske, "[N") And FindString(usermaske, "]")
;Prüfen, ob ein Start- bzw. Endwert angegeben ist
pStart.l = FindString(usermaske, "[N", 1) + 2
pEnde.l = FindString(usermaske, "]" , pStart - 1)
platzhalter.s = Mid(usermaske, pStart, (pEnde - pStart))
;Wenn ein "-" im Platzhalter vorhanden ist, Start und Endwert holen
If FindString(platzhalter, "-")
;Integerwert vor dem "-" holen
first.l = Val(Left(platzhalter, FindString(platzhalter, "-") - 1))
;Integerwert nach dem "-" holen
last.l = Val(Mid (platzhalter, FindString(platzhalter, "-") + 1))
;Wenn der ;Integerwert vor dem "-" = 0 (keine Zahl, z.B. [N-5]) ist, diesen auf 1 setzen
If first = 0: first = 1: EndIf
;Wenn der ;Integerwert nach dem "-" = 0 (keine Zahl, z.B. [5-]) ist, diesen auf unendlich setzen
If last = 0: last = 9999: EndIf
ersetze.s = Mid(dateiname, first, (last-first) + 1)
Else
;Wenn keine Start und Endwerte angegeben sind, den kompletten Namen zuweisen
ersetze = dateiname
EndIf
;den zu aktuellen Platzhalterin der Usermaske ersetzen mit dem ermittelten Teilstring
usermaske = ReplaceString(usermaske, "[N" + platzhalter + "]", ersetze, #PB_String_CaseSensitive, 1, 1)
Wend
Debug "aus" + #TAB$ + dateiname
Debug "wird" + #TAB$ + usermaske
und seine Ideen mit mir zu teilen...
Ich wünsche allen natürlich auch noch einen "Guten Rutsch" ins neue Jahr!