Arsip: gimana buat looping dalam fungsi yang nggak bikin crash
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 ...
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 3 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 4 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 11 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 11 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 11 years ago
Random Topic
- Speed On TMediaPlayer
by clark in Multimedia & Graphic Enhancement more 17 years ago - d bantu y,acces,.. pencarian
by alisiana in Lain-lain more 12 years ago - Pake Flash Didelphi
by saysansay in Hal umum tentang Pascal Indonesia more 18 years ago - nama komponen dijadiin nama komponen yg laen??
by imunk in Tip n Trik Pemrograman more 18 years ago - row dbgrid membesar
by chandra in Tip n Trik Pemrograman more 16 years ago - Gimana cara buat popup?
by jancky in Tip n Trik Pemrograman more 16 years ago - Tips Atasi gagal koneksi ketika menggunakan ADOConnection...
by EkoIndri in Tip n Trik Pemrograman more 17 years ago - [Saran] Maklumi Para Newbie & Delphi Pemula
by babypigs in Kritik & Saran more 15 years ago - Ngeload data dari File Notepad ke MySQL
by Yudho in MySQL more 17 years ago - tool utk baca & cetak struktur database
by shindo in Hal umum tentang Pascal Indonesia more 17 years ago