Thema: Delphi Hashen!!! Wie???

Einzelnen Beitrag anzeigen

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