Einzelnen Beitrag anzeigen

silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Strings vergleichen geht SAULAHM!!!

  Alt 31. Dez 2004, 12:09
hi,

die möglichkeit von Muetze1 ist leider so um die 60% langsamer (bei 1000000 durchläufen)...
hier die wertetabelle:


meine möglichkeit: ~ 0,835528537844894
Muetze1's: ~ 1,40521434986849
Christian Seehase's: ~ 0,802533841591599

und die 4. aus allen: ~ 0,440150074939692


hier ist sie (sogar mit mehr dateitypen):

Delphi-Quellcode:
function GetImgIndex(const lExt: string) : Byte;

type
  TcsExtToDW = packed record
    case byte of
      0 : (sExt : string[4]);
      1 : (bDummy : byte;
           dwExt : DWORD);
  end;

var
  etdWork : TcsExtToDW;
  i: Integer;

begin
  RESULT := 17;
  etdWork.dwExt := 0;
  i := LastDelimiter('.'+PathDelim+DriveDelim, lExt);
  if (i > 0) and (lExt[i] = '.') then begin
    etdWork.sExt := LOWERCASE(Copy(lExt, i+1, MaxInt));


  case etdWork.dwExt of
    $00657865 : Result := 6; // exe
    $0067706A, // jpg
    $6765706A, // jpeg
    $00706D62, // bmp
    $00666967, // gif
    $00676E70 : Result := 7; // png
    $006D7468, // htm
    $6C6D7468 : Result := 8; // html
    $00747874, // txt
    $00696E69, // ini
    $00666E69, // inf
    $00737363 : Result := 9; // css
    $00726172, // rar
    $0070697A, // zip
    $00626163, // cab
    $00656361 : Result := 10; // ace
    $0033706D, // mp3
    $00766177, // wav
    $0067676F, // ogg
    $0064696D, // mid
    $00616D77, // wma
    $00616D72 : Result := 11; // rma
    $0067706D, // mpg
    $6765706D, // mpeg
    $0065706D, // mpe
    $00766D77, // wmv
    $00697661, // avi
    $00667361, // asf
    $00766F6D, // mov
    $00006D72 : Result := 12; // rm
    $00636F64, // doc
    $00667472, // rtf
    $00666470, // pdf
    $00747070, // ppt
    $00737070 : Result := 13; // pps
    $00706C68, // hlp
    $006D6863 : Result := 14; // chm
    $00667773 : Result := 15; // swf
    $006B6E6C : Result := 16// lnk
  end;
end;
end;

bis dateitypen kommen, die mehr als 4 zeichen haben, oder es noch eine schnellere möglichkeit gibt, nehme ich die lösung!!

danke!!!


edit: noch ne frage - WARUM IST ANSILOWERCASE LANGSAMER ALS LOWERCASE????

edit2: und wie macht das der explorer???
  Mit Zitat antworten Zitat