1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| procedure TWindow.btOpenClick(Sender: TObject); const Playlist: Array[0..1] of TClass = (TM3U, TPLS); var Data: TStringList; I: Integer; Obj: TObject; begin if Window.OpenDlg.Execute then begin Data := TStringList.Create; try Data.LoadFromFile(Window.OpenDlg.FileName);
for I := Low(Playlist) to High(Playlist) do begin try Obj := Playlist[I].Create(Data); except Obj.Free; Obj := nil; end; if Assigned(Obj) then exit; end; finally Data.Free; end; end; end; |
Anbei folgende Prozedur, welche eine Datei lädt. Anschließend wird ein Objekt erstellt, dessen Konstruktor die StringList Data auf ein Dateiformat hin untersucht. Schlägt die Analyse fehl, wird eine Exception geworfen und die Schleife läuft ein weiteres Mal durch. Ich möchte je nach Dateiinhalt das passende Objekt erstellen, aber leider weiß ich nicht genau, wie ich das anstelle. Vielleicht ist mein Ansatz auch falsch.
Ich lade eine Datei und will entsprechend dem Inhalt das passende Objekt erstellen und die Daten weiterverarbeiten. Ich würde gerne massenhaft if-Abfragen vermeiden, da die Liste der Dateitypen länger als 3 oder 4 Elemente werden wird. Ich hoffe, mein Gedankengang wurde klar. Jemand eine Idee?
