![]() |
Wie programmiere ich Masken?
Hallo zusammen,
ich möchte eine MP3-Datei (Den Dateinamen) auseinandernehmen, das heißt per Maske Teile zuordnen nach folgendem bzw ähnlichem Prinzip: %Artist%-%Titel%.mp3 Hier wüsste nun das Programm, dass vor dem Bindestrich der Artist und hinter dem Bindestrich der Titel kommt. Nun möchte ich das ganze so Benutzefreundlich gestalten, dass der Benutzer seine Maske definieren kann wie er will. Habt Ihr da eine Lösung wie ich da beim programmieren am besten anfange? Danke! |
Re: Wie programmiere ich Masken?
Wenn das so einfach bleibt, tuts ja ein simples
![]() Du definierst die verwendbaren Parameter, also z.B. %Artist% %Titel% %Bitrate% %TrackNr% oder was auch immer (die Daten müssen dir natürlich vorliegen) - bei der Umbenennung erhältst du den Dateinamen dann einfach, indem du für jeden Parameter die entsrpechende StringReplace-Routine aufrufst ;) |
Re: Wie programmiere ich Masken?
Hallo,
danke für deine Antwort, aber so ganz verstehe ich das noch nicht. Also der User gibt mir eine Maske zum Beipsiel diese hier vor: %Artist% - %Titel%.mp3 Nun möchte ich seine MP3-Dateien analysieren und immer bei seinen Dateinamen Artist und Titel auslesen... Aber wie soll ich da was ersetzen? Danke ;-) |
Re: Wie programmiere ich Masken?
Zitat:
Ich dachte, du willst die MP3-Dateinamen festlegen, nicht daraus auslesen - da hilft dann mein Vorschlag nix... |
Re: Wie programmiere ich Masken?
Trotzdem Danke ;-)
Hast du vielleicht einen Vorschlag für mein Problem? |
Re: Wie programmiere ich Masken?
Manuell könnte das ganze so aussehen: (ich glaube nicht, dass es das so schon fertig in der vcl/rtl gibt)
- % suchen - nächstes Zeichen analysieren. Wenn ebenfalls % löschen und um 1 Zeichen vorrücken und wieder auf Start - nächstes % suchen (ist dann das ende des namens) - wieder auf start - aber wenn neuer name gefunden wurde, oder ende erreicht, teilstring zwischen den beiden namen seperat speichern. Damit solltest du aus "%Artist%-%Titel%.mp3" sowas bekommen: <ARTIST> - <TITEL> .mp3 Du hast also einerseits die Namen, die verwendet wurden, als auch die Trennstrings dazwischen. Jetzt kannste dir z.B. nen RegEx zusammenbasteln der dir aus einem Dateinamen genau das herauspickt, was du haben willst. (schritt 2 dient als sicherung, damit man im Falle des Falles auch ein % eingeben kann: %% wird dann zu einem %) |
Re: Wie programmiere ich Masken?
|
Re: Wie programmiere ich Masken?
Hallo,
erstmal danke für die Antworten! Ich habe jetzt selber eine kleine Funktion geschrieben und stelle diese mal hier rein. Vielleicht findet ihr ja noch Fehler oder habt Verbesserungsvorschläge ;-)
Delphi-Quellcode:
Function StringPerMask(Eingabe, Maske:String; MaskSubString:String;Frontzeichen:Boolean=false):String;
var PosOfTrennerinMask, PosOfTrennerinEingabe, Trenneranzahl:integer; TrenneranzahlEingabe:integer; Trenner, Abschlusstrenner:String; Ausgabe:String; i:integer; begin //Eingabe von Leerzeichen befreien Eingabe:=trim(Eingabe); //Wo befindet sich der Trenner und Abschlusstrenner PosOfTrennerinMask := Pos(MaskSubString, Maske)-1; Trenner:=copy(Maske,PosOfTrennerinMask,1); Abschlusstrenner:=copy(Maske,PosOfTrennerinMask+length(MaskSubString)+1,1); //Wie oft kommt Trenner in Maske vor? Trenneranzahl:=0; for i := 1 to PosOfTrennerinMask do begin if Maske[i]=Trenner then inc(Trenneranzahl); end; TrenneranzahlEingabe:=0; //Wo befindet sich der Trenner in der Eingabe? for i := 1 to length(Eingabe) do begin if Eingabe[i]=Trenner then inc(TrenneranzahlEingabe); if TrenneranzahlEingabe=Trenneranzahl then begin PosOfTrennerineingabe:=i; break; end; end; //Ausgabestring zusammensetzen Ausgabe:=''; for I := Posoftrennerineingabe+1 to length(eingabe) do begin if (Eingabe[i]<>Trenner) and (Eingabe[i]<>Abschlusstrenner) then begin Ausgabe:=Ausgabe+Eingabe[i]; end else break; end; //Falls Kein Fronttrennzeichen, wird das erste Zeichen der Eingabe übernommen if (Posoftrennerineingabe=1) and Frontzeichen then insert(Eingabe[1],Ausgabe,1); result:=Ausgabe; end; // VERWENDUNG { Eingabe=Irgendeine Eingabe des Benutzers z.B. Reinhold Maier - Der Mai.mp3 Maske=Die Maskenvorlage z.B. %Artist%-%Titel%.mp3 MaskSubString=Welcher Teil der Maske soll ausgegeben werden z.B. %Artist% } |
Re: Wie programmiere ich Masken?
Hallo,
leider ist in dem oben geposteten Code ein Fehler, den ich nicht behoben bekomme. Vielleicht könnt ihr helfen... Also wenn nun ein Dateiname eines Liedes übergeben wird, der vor und nach dem Trenner ein Leerzeichen hat, dann wird die Maske nicht richtig zugeordnet. Beispiel: Das funktioniert: Hans Maier-Der Wagen.mp3 Das funktioniert nicht: Hans Maier - Der Wagen.mp3 Wer kann helfen? Danke! |
Re: Wie programmiere ich Masken?
*push*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz