Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie programmiere ich Masken? (https://www.delphipraxis.net/133376-wie-programmiere-ich-masken.html)

Dragon27 30. Apr 2009 18:07


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!

Meflin 30. Apr 2009 18:13

Re: Wie programmiere ich Masken?
 
Wenn das so einfach bleibt, tuts ja ein simples Delphi-Referenz durchsuchenStringReplace ;)

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 ;)

Dragon27 30. Apr 2009 18:25

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 ;-)

Meflin 30. Apr 2009 18:28

Re: Wie programmiere ich Masken?
 
Zitat:

Zitat von Dragon27
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...

:oops:

Ich dachte, du willst die MP3-Dateinamen festlegen, nicht daraus auslesen - da hilft dann mein Vorschlag nix...

Dragon27 30. Apr 2009 18:40

Re: Wie programmiere ich Masken?
 
Trotzdem Danke ;-)

Hast du vielleicht einen Vorschlag für mein Problem?

jfheins 30. Apr 2009 18:49

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 %)

Panthrax 1. Mai 2009 00:12

Re: Wie programmiere ich Masken?
 
reguläre Ausdrücke für Delphi

Dragon27 1. Mai 2009 09:54

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%
}

Dragon27 1. Mai 2009 19:21

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!

Dragon27 5. Mai 2009 10:26

Re: Wie programmiere ich Masken?
 
*push*


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz