da nece morati da se radi sa bazama, ali polako se "udebljao", tako da cu ga kad-
tad morati napraviti sa bazom, ali da ne duzim.... uradio sam sve sa ini fajlovima
jer nisam ocekivao velik broj podataka, a ceo program sa dosta mogucnosti je
velicine nekoliko stotina kilobajta sto mu je opet dobra strana...
Dakle. U ini fajl upisujem SEKCIJE koje su ustvari napravljeni string po
formuli koju cete provaliti iz same procedure. Zatim u tu sekciju
ubacujem neke varijable i njihove vrednosti. E sad da zanemarimo
upis u ini, meni ustvari treba da mi neko kaze da li je moguce napraviti
brzu proceduru za pretragu od ove koju sam ja sklepao po brute force
principu (vrte se svi datumi za period jedne godine, dve promenljive
su staticne, a dve se menjaju od 1 do 9, tako da se na kraju ukupno
dobije 30132 kombinacije. Mom celeronu na 2,67Ghz treba desetak
sekundi da to provrti sto mi je mnogo, a i mana moje procedure je da trajanje pretrage
ne zavisi od broja upisa u ini-ju vec uvek isto traje zbog nacina
pretrage. Ako neko ima neko elegantnije resenje, molim za predlog.
Gledao sam malo metode za rad sa ini fajlovima ali nisam medju
njima uspeo da nadjem nesto sto bi mi pomoglo da ovo brze odradim....
..mada mozda sam nesto prevideo.
CODE:
// -------------------
// -------------------
// Ako je kljuc Nastavni Predmet (indeks 3):
If KeyListBox.ItemIndex = 3 Then
begin
If NPEdit.Text = '' Then
begin
ShowMessage('Niste uneli KLJUČ po kome treba raditi pretragu!');
Exit;
end;
begin
GlavnaForma.Image4.Visible:= True;
GlavnaForma.Image4.Repaint;
// Sada ide pretrazivanje INI-ja po kljucu Nastavni Predmet...
indeks:= 0;
Dan:= 1;
Mesec:= 1;
Godina:= GlavnaForma.PeriodZaPretragu;
ProgressBar1.Min:= 0;
ProgressBar1.Max:= 30132; // broj kombinacija za 1 god
ProgressBar1.Step:= 1;
REPEAT
Repeat
repeat
NapravljenDatum:= IntToStr(Dan) + '.' +
IntToStr(Mesec) + '.' + IntToStr(Godina);
For o:= 1 to 9 do
begin
For c:= 1 to 9 do
begin
If ProgressBar1.Position > 30130 then Image4.Visible:= False;
NapravljenaSekcija:= NapravljenDatum + '_' +
GlavnaForma.ID_IniUst + '_' +
GlavnaForma.ID_IniRaz + '_' + IntToStr(o) + '_' +
IntToStr(c); // ovde vidite da se samo zadnje dve menjaju kod pravljenja stringa.
ProgressBar1.StepIt;
If ini.SectionExists(NapravljenaSekcija) Then
BEGIN
If AnsiContainsStr ((ini.ReadString(NapravljenaSekcija,
'PREDMET','')), NPEdit.Text) Then // proveravam da li za tu sekciju ima ono sto je uneto u pretrazivac Edit.
begin
RezListBox.Items.Insert(indeks, NapravljenaSekcija); // insertujem rezultate u drugi list box
Indeks:= Indeks + 1;
end;
END;
end;
end;
Dan:= Dan + 1;
until Dan = 32; // ne obracajte paznju na broj dana u mesecu :))
Dan:= 1;
Mesec:= Mesec + 1;
Until Mesec = 13; // ... niti na broj meseci u godini :)))
Mesec:= 1;
Godina:= Godina + 1;
UNTIL Godina = GlavnaForma.PeriodZaPretragu + 1; // ovo je jasno ko dan.
Indeks:= 0;
ProgressBar1.Position:= 0;
ShowMEssage('P r e t r a g a g o t o v a !');
ini.Free;
ProgressBar1.Visible:= False;
Exit;
end;
end;
// -------------------
// -------------------
Molim Vas, ima li ko brze resenje??
(samo mi ne spominjite fortrane i c++- eve i masince i tako te svemirce)
HVALA.