AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hashen!!! Wie???

Ein Thema von ATwardz · begonnen am 7. Okt 2003 · letzter Beitrag vom 13. Dez 2003
 
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#1

Hashen!!! Wie???

  Alt 7. Okt 2003, 21:21
Als ich habe ein Programm was Dateien vergleicht, damit dieses nicht zu langsam wird wurde mir gesagt das ich eine Hash-table anlegen soll!
Nun meine simple Frage kann mir jemand mal etwas dazu erklären!
HAbe diesen Code im Internet gefunden, blicke jedoch nicht ganz durch wie ich meine Procedure Arefilesequal,

Delphi-Quellcode:
Function AreFilesEqual( Const file1, file2: String ): Boolean;
Var
  m1, m2: TMemoryStream;
Begin
  Result := False;
  m1 := TMemoryStream.Create;
  try
   m1.LoadFromFile( file1 );
   m2:= TMemoryStream.Create;
   try
     m2.LoadFromFile( file2 );
     If m1.size = m2.size Then
       Result := CompareMem( m1.Memory, m2.memory, m1.size );
   finally
     m2.free;
   end;
  finally
   m1.free;
  end
End;
mit diesem Code in verbindung setzen kann oder bin ich da auf dem Holzweg? Im Forum habe ich nichts gefunden und im bei google keine befriedigende Erklärung!

Delphi-Quellcode:
program hash1_2;



uses
  simpleHash in 'simpleHash.pas';

const
  cHexChars: array [0..15] of char = '0123456789abcdef';
  cNullStr: PChar = '00000000';

  function hexStr(i: cardinal): string;
  var n: integer;
  begin
    if i=0 then
      result:='0'
    else begin
      setString(result,cNullStr,8);
      n:=8;
      while (i>0) do begin
        result[n]:=cHexChars[i and $f];
        i:=i shr 4;
        dec(n);
      end;
      for n:=1 to 8 do
        if result[n]<>'0then begin
          delete(result,1,n-1);
          exit;
        end;
    end;
  end;

var h: TStringHash; n, Count, i: cardinal; code: integer; s: string;
begin
  n :=1;
  if ParamCount=1 then
    Val(ParamStr(1),n,code);

  h:=TStringHash.Create;
  for i:=1 to n do
    h.add(hexStr(i),i);
  count:=0;
  for i:=1 to n do begin
    str(i,s);
    if h.get(s)<>nil then inc(Count);
  end;
  h.Destroy;

  writeln(Count);
end.
Da ich bis vor kurzen rein garnichts vom Hashen wusste, wäre ich sehr dankbar für jede Hilfestellung!

DAnke im Vorraus!
  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 07:24 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