AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MAC-Hersteller-Zuordnung bzw. Wie mit einem sehr großen Datensatz umgehen?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von CodeX · begonnen am 23. Mär 2017 · letzter Beitrag vom 24. Mär 2017
 
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 24. Mär 2017, 07:30
Moin...

Wenn es keine DB hat, dann würde ich die Textdatei als Ressource kompilieren. Nach dem Programmstart würde ich die Ressource einlesen. Für die Lagerung der Informationen käme ein TDictionary<string, string> in Frage. Beim Einlesen wird aus jeder Zeile aus den ersten 6 Zeichen der Key generiert in der Rest ist das Value. Die Dupletten kannst du schon beim Einlesen handeln. Wenn der Key existiert dann den Value an den bestehenden Value hängen.
...fertsch.

Vorteil:

1. Liste.LoadFromFile('nmap-mac-prefixes.txt'); ist nicht notwendig da die Textdatei zur Laufzeit nicht beigelegt werden muß...wird beim Erzeugen einkompiliert.
2. Keine Änderung des Quelltextes bei Inhaltsänderungen der TXT...einfach neu kompilieren.
3. Ein Dictionary ist dafür da was aus einer "Liste" herauszusuchen...deutlich schneller als TStringlist.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes, System.Generics.Collections, System.Generics.Defaults,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FDictionary: TDictionary<string, string>;
    procedure ReadFile;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDictionary := TDictionary<string, string>.Create;
  ReadFile;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FDictionary.Free;
end;

procedure TForm1.ReadFile;
var
  I: Integer;
  Content: TStringList;
  TextStream: TResourceStream;
  CurrentRowKey: string;
  CurrentRowValue: string;
begin
  FDictionary.Clear;
  Content := TStringList.Create;
  try
    TextStream := TResourceStream.Create(HInstance, 'Content', PWideChar('ContentFile'));
    try
      Content.LoadFromStream(TextStream);
      for I := 0 to Content.Count - 1 do
      begin
        CurrentRowKey := Copy(Content[I], 1, 6);
        if not FDictionary.TryGetValue(CurrentRowKey, CurrentRowValue) then
        begin // einfügen
          CurrentRowValue := Copy(Content[I], 8, Length(Content[I]) + 8);
          FDictionary.Add(CurrentRowKey, CurrentRowValue);
        end
        else
        begin // Key zusammensetzen bei Duplikaten
          CurrentRowValue := Copy(Content[I], 8, Length(Content[I]) + 8);
          FDictionary.AddOrSetValue(CurrentRowKey, FDictionary.Items[CurrentRowKey] + '; ' + CurrentRowValue);
        end;
      end;
    finally
      TextStream.Free;
    end;
  finally
    Content.Free;
  end;
end;

end.
RC Datei Inhalt:
Zitat:
Content ContentFile "D:\Blubb\nmap-mac-prefixes.txt"
... als RC Datei ins Projekt. (Pfadangaben anpassen)
Angehängte Grafiken
Dateityp: png Resccource.png (58,0 KB, 9x aufgerufen)
Angehängte Dateien
Dateityp: zip Muster.zip (462,7 KB, 4x aufgerufen)

Geändert von haentschman (24. Mär 2017 um 11:21 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz