striker159
Lt. Junior Grade
- Registriert
- Dez. 2008
- Beiträge
- 327
hallo,
ich habe mir eine kleine funktion geschrieben, die bei allen (mp3) dateien in einem ordner aus dem dateinamen den interpret und den titel ausließt, und diese in den id3 tag schreibt.
die dateinamen haben die form interpret, leerzeichen, trennzeichen, leerzeichen, titel ; also
interpret - titel zb.
übergeben wird der orderpfad und das trennzeichen.
so sieht mein code aus (delphi)
schön und gut, das funktioniert soweit.
jetzt habe ich aber zwei fragen.
1.wenn im dateinamen der interpret auch "leerzeichen-trennzeichen-leerzeichen" hätte, wären die tags verhunzt. gibt es eine möglichkeit, dass dann trotzdem an der richtigen stelle geteilt wird? man kann ja nicht festlegen ' du teilst erst beim 2 vorkommen des trennzeichens'. schließlich kann ja auch alles "normal" sein und nur ein trennzeichen vorhanden sein.
2. wie bekomme ich es hin, dass es egal ist, ob voranstehende/nachstehende leerzeichen neben dem trennzeichen sind? also dass der dateiname auch so aussehen kann:
interpret -titel
interpret- titel
interpret-titel
auch wieder unter berücksichtigung von 1. ( ein '-' im interpret kommt wohl häufiger vor als ein ' - ' ^^)
ich habe mir eine kleine funktion geschrieben, die bei allen (mp3) dateien in einem ordner aus dem dateinamen den interpret und den titel ausließt, und diese in den id3 tag schreibt.
die dateinamen haben die form interpret, leerzeichen, trennzeichen, leerzeichen, titel ; also
interpret - titel zb.
übergeben wird der orderpfad und das trennzeichen.
so sieht mein code aus (delphi)
Code:
procedure SetId3Tags(Path,split: string);
var titel1,titel2,inter2:string;
stream: TFilestream;
SR: TSearchRec;
Id3v2Tag: TId3v2Tag;
begin
Id3v2Tag := TId3v2Tag.Create;
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
stream := TFileStream.Create(Path+SR.Name, fmOpenRead or fmShareDenyWrite);
Id3v2Tag.ReadFromStream(stream);
stream.free;
titel1 := stringreplace(sr.Name,'.mp3','',[rfIgnoreCase]);
inter2 := copy(titel1,0,pos(' '+split+' ',titel1));
titel2 := copy(titel1,pos(' '+split+' ',titel1)+1,length(titel1));
//titel2 := stringreplace(titel2,' (Full) [HD]' ,'',[rfIgnoreCase]);
titel2 := stringreplace(titel2,split+' ','',[rfIgnoreCase]);
id3v2tag.Title := copy(titel2,1,length(titel2));
id3v2tag.Artist :=inter2;
id3v2Tag.WriteToFile(Path+SR.Name);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
Id3v2Tag.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var pfad,trennzeichen:string;
begin
pfad := EPfad.Text;
if pfad[length(pfad)]<>'\' then
pfad := pfad+'\';
trennzeichen := stringreplace(Etrennzeichen.Text,' ','',[rfReplaceAll]);
SetId3Tags(pfad,trennzeichen);
showmessage('fertig');
end;
schön und gut, das funktioniert soweit.
jetzt habe ich aber zwei fragen.
1.wenn im dateinamen der interpret auch "leerzeichen-trennzeichen-leerzeichen" hätte, wären die tags verhunzt. gibt es eine möglichkeit, dass dann trotzdem an der richtigen stelle geteilt wird? man kann ja nicht festlegen ' du teilst erst beim 2 vorkommen des trennzeichens'. schließlich kann ja auch alles "normal" sein und nur ein trennzeichen vorhanden sein.
2. wie bekomme ich es hin, dass es egal ist, ob voranstehende/nachstehende leerzeichen neben dem trennzeichen sind? also dass der dateiname auch so aussehen kann:
interpret -titel
interpret- titel
interpret-titel
auch wieder unter berücksichtigung von 1. ( ein '-' im interpret kommt wohl häufiger vor als ein ' - ' ^^)