Arsip: gimana buat looping dalam fungsi yang nggak bikin crash

 
user image
more 16 years ago

simba

Iseng2 bikin contohnya, tentu saja dgn code dan gaya Delphi. mode baik hati = ON :D

procedure TForm1.Button1Click(Sender: TObject);
var
  i,c,n: Integer;
  sFile: TStringList;
  fileName, wordFind: string;
begin
  // set variable pencarian
  fileName := 'C:\Trash\big_file.txt';
  wordFind := 'INSERT ';
  // reset status pembatalan proses
  CancelProcess := False;
  
  // tulis waktu mulai proses
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Start: '+TimeToStr(Now));
  try
    // buka file teks dan simpan ke TStrings
    sFile := TStringList.Create;
    sFile.LoadFromFile(fileName);
    // simpan info jumlah baris
    n := 0;
    c := sFile.Count;
    // cari kata per baris
    for i := 0 to c-1 do
    begin
      // tampilkan no baris yg ditemukan  
      if Pos(wordFind, sFile[i]) > 0 then 
      begin
        Memo1.Lines.Add('Baris: '+IntToStr(i));
        // simpan jumlah kata yg ditemukan
        n := n + 1;
      end;
      // tampilkan indikator progress
      Label1.Caption := 'Progress: '+IntToStr(i100 div c + 1)+'%';
      // beri kesempatan pesan lain diproses
      Application.ProcessMessages;
      // hentikan proses pencarian
      if CancelProcess then Break;
    end;
  finally
    // bebaskan TStrings
    sFile.Free;
    // tulis waktu selesai proses
    Memo1.Lines.Add('Stop: '+TimeToStr(Now));
    Memo1.Lines.Add('Kata ditemukan: '+IntToStr(n));
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  // batalkan proses pencarian
  CancelProcess := True; // this is a private class variable
end;
Algoritma ini membutuhkan waktu rata2 2 menit 30 detik untuk mencari teks dalam file teks berukuran 30 MB (mesin P4 1 GHz RAM 1 GB). :D Itu pun jika kata yg dicari ada di tiap baris, kalo gak, bisa lebih cepat lagi. Jika kata yg dicari ada kurang dari 10 buah, prosesnya gak sampe 1 detik. :D contoh file aku ambil dari hasil mysql dump berisi 220 ribu record* :D Aplikasi masih responsif saat pencarian berlangsung, dan pencarian bisa dibatalkan kapan saja (dgn klik Button2). Tentu saja ini hanya contoh sederhana. Bisa saja prosesnya dibuat lebih cepat dari itu, tapi dgn algoritma lain. ;)
more ...
  • Pages:
  • 1
  • 2
  • 3
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com