Arsip: Menyingkat Coding

 
user image
more 15 years ago

tAtA

gimana cara menyingkat code program berikut ini : procedure TForm1.Bt_prosesClick(Sender: TObject); var x : integer; begin for x:= 1 to Memo1.Lines.Count do begin case CMB_box.ItemIndex of 0: begin if (grid_data.Cells[18,x]='411') or (grid_data.Cells[18,x]='412') or (grid_data.Cells[18,x] = '419') or (grid_data.Cells[18,x]='421') or (grid_data.Cells[18,x] = '422') or (grid_data.Cells[18,x]='423') or (grid_data.Cells[18,x] = '424') or (grid_data.Cells[18,x]='425') or (grid_data.Cells[18,x] = '426') or (grid_data.Cells[18,x]='427') then M_Filtered.Lines.Add(Memo1.Lines.Strings[x-1]); end; 1: begin if (grid_data.Cells[18,x] = '429') or (grid_data.Cells[18,x]='422') then M_Filtered.Lines.Add(Memo1.Lines.Strings[x-1]); end; end; end; end; terima kasih
user image
more 15 years ago

pebbie

menyingkat OR sepanjang itu tapi memperlama eksekusi gapapa? taro aja nilainya di Hidden Listbox(TStrings), trus pake IndexOf
user image
more 15 years ago

tAtA

he he, aku butuh juga untuk akses data yg cepet, coz gak cuman segitu nanti datanya, kalo kita bikin ke array dulu bisa gak yha...
user image
more 15 years ago

DelphiExpert


procedure AddDataRange(const List: TStrings; const R1, R2: Integer);
var I: Integer;
begin
  for I:= R1 to R2 do
    List.Add(IntToStr(I));
end;
function InitFilter1: TStrings;
begin
  Result:= TStringList.Create;
  try
    TStringList(Result).Sorted:= True;
    AddDataRange(Result, 411, 412);
    AddDataRange(Result, 419, 419);
    AddDataRange(Result, 421, 427);
  except
    FreeAndNil(Result);
    raise;
  end;
end;
function InitFilter2: TStrings;
begin
  Result:= TStringList.Create;
  try
    TStringList(Result).Sorted:= True;
    AddDataRange(Result, 422, 422);
    AddDataRange(Result, 429, 429);
  except
    FreeAndNil(Result);
    raise;
  end;
end;
var
  GFilter1: TStrings = nil;
  GFilter2: TStrings = nil;
function Filter1(const Data: string): Boolean;
begin
  if GFilter1 = nil then
    GFilter1:= InitFilter1;
  
  Result:= GFilter1.IndexOf(Data) >= 0;
end;
function Filter2(const Data: string): Boolean;
begin
  if GFilter2 = nil then
    GFilter2:= InitFilter2;
  
  Result:= GFilter2.IndexOf(Data) >= 0;
end;
// --------------------------------
procedure TForm1.Bt_prosesClick(Sender: TObject); 
var x : integer; 
begin 
  for x:= 1 to Memo1.Lines.Count do 
  begin 
  case CMB_box.ItemIndex of 
  0: begin 
        if Filter1(grid_data.Cells[18,x]) then
        then 
        M_Filtered.Lines.Add(Memo1.Lines.Strings[x-1]); 
      end; 
  1: begin 
        if Filter2(grid_data.Cells[18,x]) then 
        M_Filtered.Lines.Add(Memo1.Lines.Strings[x-1]); 
      end; 
  end; 
  end; 
end;
Fast... general purpose... btw... sebetulnya code (kebutuhan) tsb. bisa dipersingkat lagi... tapi... cepek dulu... hihihi :mrgreen: note: code tersebut tidak saya test menggunakan compiler, written on-the-fly using opera IDE
user image
more 15 years ago

DelphiExpert

lho lho... koq tambah panjang ya... :mrgreen: tapi dijamin dinamis! dengan modifikasi sedikit, data dapat dibaca dari file... replace:

...
AddDataRange(Result, 411, 412);
...
dng:

var FileData: TStrings;
begin
  FileData:= TStringList.Create;
  try
    FileData.LoadFromFile('somefile.txt');
    for I:= 0 to FileData.Count - 1 do
      GFilter1.Add(FileData[I]);
      // dan atau
      GFilter2.Add(FileData[I]);
  finally
    FreeAndNil(FileData);
  end;
selanjutnya penggunaannya sama:

...
if Filter1(grid_data.Cells[18,x]) then
...
dalam hal case .. of ; sebenarnya bisa dipersingkat lagi... tapi... cepek dulu... hak hak hak :mrgreen:
user image
more 15 years ago

simba

Mungkin pake set (of integer) bisa lebih singkat dan lebih cepat, daripada pake string list (with conversion penalty). Just an idea. ;)
user image
more 15 years ago

DelphiExpert

ya... gunakan const array of integer jika data-nya adalah statis menggunakan set juga dapat dilakukan, namun dengan catatan, ordinal data harus urut dan jelas ;)
user image
more 15 years ago

mas_kofa

aku usul pake set ........kaya @DE

    if StrToIntDef(grid_data.Cells[18,x],0) in [set] then.........
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com