Registriert seit: 31. Mai 2009
1.198 Beiträge
Turbo Delphi für Win32
|
AW: Brauche Ideen für flexiblen/modularen Programmteil
27. Jan 2012, 17:28
Delphi-Quellcode:
TDatenSammlerClass = class of TDatenSammler;
TDatenSammler = class
public
procedure LoadFromFile(const AFilename: String); virtual; abstract;
procedure SaveToTable(const ATable: TTable); virtual; abstract;
end;
TCSVImporter = class(TDatenSammler)
public
procedure LoadFromFile(const AFilename: String); override;
procedure SaveToTable(const ATable: TTable); override;
end;
// #1 für weitere Formate - dementsprechende Klasse implementieren (von TDatenSammler ableiten)
(...)
implementation
type
TDatenSammlerExtAssoc = record
Ext: String;
_Class: TDatenSammlerClass;
end;
const
DatenSammlerExtAssoc: Array[0..{anzahl der Datenformate - 1}] of TDatenSammlerExtAssoc = ((Ext: '.csv'; _Class: TCSVImporter), {...});
// #2 Wichtig: hier ^ registrieren
function GetDatenSammlerClassFromExt(const AExt: String): TDatenSammlerClass;
var
i: Integer;
begin
for i := 0 to High(DatenSammlerExtAssoc) do
with DatenSammlerExtAssoc[i] do
if Ext = AExt then
begin
Result := _Class;
break;
end;
end;
{...später im Programm}
var
ldr: TDatenSammler;
begin
ldr := GetDatenSammlerClassFromExt(ExtractFileExt(Filename)).Create;
ldr.LoadFromFile(Filename);
ldr.SaveToTable(MyTable);
ldr.Free;
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
Geändert von Aphton (27. Jan 2012 um 17:37 Uhr)
|