TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Kod: Tümünü seç

Type TKordinat=record x,y,z:double;end;

var Fkor,FList:TStringList;
//1.koordinat 
procedure TStiffness.AddKor(name:string;t:TKordinat);
begin
  FKor.Add(Format('%s=%g;%g;%g', [name,t.x,t.y,t.z]));
end;

function TStiffness.GetKor(name:string;var t:TKordinat):Boolean;
begin
  FList.DelimitedText:=FKor.Values[name];
  result:=FList.DelimitedText<>'';if not result then exit;
  t.x:=StrToFloat(FList.Strings[0]);
  t.y:=StrToFloat(FList.Strings[1]);
  t.z:=StrToFloat(FList.Strings[2]);
end;
Slm
Bir bileşen yazmaya çalışıyorum. Kodlarımın küçük bir örneğini yukarıda gösterdim.
TStringList ile ekleme ve arama işlemleri yaptırıyorum. Ancak kayıt sayısı fazlalaştıkça arama ve ekleme işlemleri çok yavaşlamaktadır.

TStringList yerine hangi component ile ekleme ve arama işlemlerini hızlıca yapabilirim.
Veya yukarıdaki kodları (arama) işlemini hızlandırma imkanı nedir.

Değerli görüş ve önerilerinizi bekliyorum.
Not:Hala Delphi 7 kullanıyorum.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen freeman35 »

Kod: Tümünü seç

Var I: Integer;
...
I:= Pos(Format('%s=%g;%g;%g', [name,t.x,t.y,t.z]), FKor.Text);
If I<=0then Exit;


text içeriği
name=value?
? işareti slinebreak yada virgül vs yani satır sonu belli döngü yerine pos ve copy() ile daha hızlı erişebilirsin sanırım.
Bir başka yöntem, memtable, bir diğeri de sqlite olabilir.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ertank »

mahsuni yazdı: 27 Haz 2021 03:03

Kod: Tümünü seç

Type TKordinat=record x,y,z:double;end;

var Fkor,FList:TStringList;
//1.koordinat 
procedure TStiffness.AddKor(name:string;t:TKordinat);
begin
  FKor.Add(Format('%s=%g;%g;%g', [name,t.x,t.y,t.z]));
end;

function TStiffness.GetKor(name:string;var t:TKordinat):Boolean;
begin
  FList.DelimitedText:=FKor.Values[name];
  result:=FList.DelimitedText<>'';if not result then exit;
  t.x:=StrToFloat(FList.Strings[0]);
  t.y:=StrToFloat(FList.Strings[1]);
  t.z:=StrToFloat(FList.Strings[2]);
end;
Slm
Bir bileşen yazmaya çalışıyorum. Kodlarımın küçük bir örneğini yukarıda gösterdim.
TStringList ile ekleme ve arama işlemleri yaptırıyorum. Ancak kayıt sayısı fazlalaştıkça arama ve ekleme işlemleri çok yavaşlamaktadır.

TStringList yerine hangi component ile ekleme ve arama işlemlerini hızlıca yapabilirim.
Veya yukarıdaki kodları (arama) işlemini hızlandırma imkanı nedir.

Değerli görüş ve önerilerinizi bekliyorum.
Not:Hala Delphi 7 kullanıyorum.
Merhaba,

Öncelikle daha yeni sürüm bir Delphi kullanmanızda çok faydalar var. Faydaların en başında Unicode desteği gelmektedir. Geliştireceğiniz bileşenin Windows 10 işletim sisteminde çalışacağını düşünerek buna ihtiyacınız olacağına inanıyorum.

Yavaşlık sorunu "kayıt sayısı" kaç olduğunda başlıyor?

Çözüm olarak normalde "dictionary" kullanmanızı önerebilirim ancak açıkçası bunu Delphi 7 ile ne derece yapabileceğiniz hakkında bir fikrim yok. Birçok dictionary çözümü "generic" desteği istemekte. Generic desteği ise bilgim dahilinde Delphi 2009 ve üzeri ile kullanılabilir.

Bunun dışında veritabanı kullanmanız mümkün olabilir. İndeks kullanarak işlemi hızlandırmanız mümkün olabilir. PostgreSQL veritabanı koordinat veri türü desteğine sahip ticari kullanımı ücretsizdir. Mutlaka koordinat veri türü desteği olan bir veritabanı kullanmanız şart değil. Ancak işinizi kolaylaştırıcı özellikler içereceği için önerdim.
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Slm
Öncelikle cevaplarınız için teşekkür ederim.
THashedStringList tipinde bir bileşen varmış. TIniFile da bunu kullanıyormuş.
THashedStringList tipinin kullanınca arama biraz daha hızlandı.
Son çare olarak memory dataset (kbmMemTable/dxMemData/RxMemoryData birini) kullanacağım.
Başka önerisi olan ve THashedStringList hakkındaki yorumlarınızı merak ediyorum.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen loaded »

Merhaba
Koordinatlarla uğraşıyorsanız ilerleyen vadede Alan gibi Geometriler vede Coğrafi Sorgular (Nokta içinde mi ? Dışında mı ? Hattın Üstünde mi ? Ne Kadar Yakınında ! ...) muhakkak bir gün yolunuza çıkacak.
ertank beyin önerdiği üzere benim de önerim her halükarda biraz araştırma yapıp Posgtresql + Postgis ikilisini denemeniz çok faydanıza olacaktır ;
Sonrasında, Milyon adetlere varan kayıtları bile çok kısa sürelerde işleyebileceksiniz.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Aynen dediğiniz gibi nokta içinde mi dışında mı türü sorulara da ilerde cevap arıyor olacağım.
Buna yönelik olarak elinizde paylaşabileceğiniz kaynak var mıdır.

Yapmak istediğim program;
Sonlu eleman yöntemleri ile (matris işlemleri) yapı elemanlarının (kiriş, kolon, döşeme gibi) iç kuvvetlerinin hesabına yöneliktir.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen loaded »

Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ikra »

Kod: Tümünü seç

Add(const AName: string; AKoordinat: TKoordinat);
begin
  FList.AddObject(AName, AKoordinat);
end;

Get(const AName: String; var AKoordinat: TKoordinat): Boolean;
var
  Index: Integer;
begin
  Index := FList.IndexOf(AName);
  
  Result := Index > -1;
  
  if Result then
   AKoordinat := Flist.Objects(Index);
end;

Get(const AName: String): TKoordinat;
var
  Index: Integer;
begin
  Result := Nil;
  
  Index := FList.IndexOf(AName);
  
  if Index > -1 then
   Result := Flist.Objects(Index);
end;
kıdemsiz üye
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Sayın loaded
Vermiş olduğunuz linkler için teşekkür ederim.
Bunlar çok kapsamlı ve harita mühendislerine hitap etmektedir.
Benim aradığım sadece formulü (işin manuel kısmı). Kod kısmını kendim çözerim.

Birde matris işlemleri ile ilgili bildiğiniz kaynak kodlu (beleş) kütüphane var mı.
Denklem çözümü, matris çapımı, tersi, transpozesi, Özdeğer hesabı (Eigen Value/Vector) v.b işlemleri yapacak.
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Sayın ikra ilginize teşekkür ederim.

Type TKordinat=record x,y,z:double;end;
benim tanımlamış olduğum (EnumType) bir record tiptir.
Object tipinde olmadığı için

Kod: Tümünü seç

 FList.AddObject(AName, AKoordinat);
bu kod çalışmıyor.
Bu tipe dönüştürme imkanı var mı
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ikra »

Kod: Tümünü seç

// Set
FList.AddObject(AName, TObject(AKoordinat);

// Get
AKoordinat := TKoordinat(FList.Objects[Index]);
kıdemsiz üye
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen mahsuni »

Sayın ikra
malesef olmadı invalid typecast hatası verdi.
Bu dönüşüm olmadı.
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ikra »

Cepten yaziyorum, pc karsisinda degilim. Olmasi gerek. Vakit bulabilirsem dener dönüs yaparim.
kıdemsiz üye
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ikra »

FList.AddObject(AName, TObject(@AKoordinat));
Seklinde pointer üzerinden cast etmeyi dene.
kıdemsiz üye
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: TStringList arama ve hızlandırma veya yeni bir bileşen önerisi

Mesaj gönderen ikra »

hallettin mi?
kıdemsiz üye
Cevapla