Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#11

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 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)
  Mit Zitat antworten Zitat