Optimierte Stringoperationen mit Platzhaltern (ähnlich TC)
Verfasst: 31.12.2019 12:29
Hallo PB-Gemeinde...
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...
Ich glaube, hier liegt Verbesserungs- bzw. Optimierungspotential. Vielleicht hat jemand von Euch Lust daran rumzubasteln
und seine Ideen mit mir zu teilen...
Ich wünsche allen natürlich auch noch einen "Guten Rutsch" ins neue Jahr!
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!