Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

AW: MAC-Hersteller-Zuordnung bzw. Wie mit einem sehr großen Datensatz umgehen?

  Alt 23. Mär 2017, 21:32
Hab mal einbisserl rumgespielt, dabei ist das rausgekommen:
Delphi-Quellcode:
unit nmap_mac_prefixes;

interface

uses
  Classes;

type
  tNMap_Mac_List = class(TObject)
    fHex : TStringList;
    fName : TStringList;
  private
    procedure Init000;
    procedure Init001;
    procedure Init002;
    procedure Init003;
    procedure Init004;
    procedure Init005;
    procedure Init006;
    procedure Init007;
    procedure Init008;
    procedure Init009;
    procedure Init010;
    procedure Init011;
    procedure Init012;
    procedure Init013;
    procedure Init014;
    procedure Init015;
    procedure Init016;
    procedure Init017;
    procedure Init018;
    procedure Init019;
    procedure Init020;
    procedure Init021;
    procedure Init022;
    procedure Init023;
    procedure Init024;
    procedure Init025;
    procedure Init026;
    procedure Init027;
    procedure Init028;
    procedure Init029;
    procedure Init030;
    procedure Init031;
    procedure Init032;
    procedure Init033;
    procedure Init034;
    procedure Init035;
    procedure Init036;
    procedure Init037;
    procedure Init038;
    procedure Init039;
    procedure Init040;
    procedure Init041;
    procedure Init042;
    procedure Init043;
    procedure Init044;
    procedure Init045;
    procedure Init046;
  public
    constructor Create;
    destructor Destroy; override;
    function GetName(AHex : String) : String;
  end;

implementation

constructor tNMap_Mac_List.Create;
begin
  fHex := TStringList.Create;
  fName := TStringList.Create;
  Init000;
  Init001;
  Init002;
  Init003;
  Init004;
  Init005;
  Init006;
  Init007;
  Init008;
  Init009;
  Init010;
  Init011;
  Init012;
  Init013;
  Init014;
  Init015;
  Init016;
  Init017;
  Init018;
  Init019;
  Init020;
  Init021;
  Init022;
  Init023;
  Init024;
  Init025;
  Init026;
  Init027;
  Init028;
  Init029;
  Init030;
  Init031;
  Init032;
  Init033;
  Init034;
  Init035;
  Init036;
  Init037;
  Init038;
  Init039;
  Init040;
  Init041;
  Init042;
  Init043;
  Init044;
  Init045;
  Init046;
end;

destructor tNMap_Mac_List.Destroy;
begin
  fName.Free;
  fHex.Free;
end;

function tNMap_Mac_List.GetName(AHex : String) : String;
var
         iIndex : Integer;
begin
  iIndex := fHex.IndexOf(AHex);
  if iIndex > -1 then Result := fName[iIndex] else Result := '<unbekannt>';
end;

procedure tNMap_Mac_List.Init000;
begin
  fHex.Add('000000'); fName.Add('Xerox');
  fHex.Add('000001'); fName.Add('Xerox');
  fHex.Add('000002'); fName.Add('Xerox');
  fHex.Add('000003'); fName.Add('Xerox');
  fHex.Add('000004'); fName.Add('Xerox');
  fHex.Add('000005'); fName.Add('Xerox');
  fHex.Add('000006'); fName.Add('Xerox');
  fHex.Add('000007'); fName.Add('Xerox');
  fHex.Add('000008'); fName.Add('Xerox');
  fHex.Add('000009'); fName.Add('Xerox');
  fHex.Add('00000A'); fName.Add('Omron Tateisi');

... und viele weitere Zeilen dieser Art ...
... verteilt auf 46 Prozeduren, da ansonsten zuviele Konstanten in einer Prozedur enthalten sind ...
... vollständig im Anhang ...

  fHex.Add('FCF8B7'); fName.Add('TRONTEQ');
  fHex.Add('FCFAF7'); fName.Add('Shanghai Baud Data');
  fHex.Add('FCFBFB'); fName.Add('Cisco');
  fHex.Add('FCFC48'); fName.Add('Apple');
  fHex.Add('FCFE77'); fName.Add('Hitachi Reftechno');
  fHex.Add('FCFEC2'); fName.Add('Invensys Controls UK');
  fHex.Add('FCFFAA'); fName.Add('IEEE Registration Authority');
end;

end.
zu benutzen in z. B. der Form:
Delphi-Quellcode:
var
procedure Irgendwas(AMac : String);
 x : tNMap_Mac_List;
begin
  x := tNMap_Mac_List.Create;
  ShowMessage(x.GetName(AMac));
  x.Free;
end;
Ob das jetzt unbedingt eine sinnvolle Lösung ist, weiß ich nicht, aber es läßt sich kompilieren und ist damit alles in der EXE drin

Geändert von nahpets (21. Nov 2017 um 16:41 Uhr)
  Mit Zitat antworten Zitat