ozel siralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

ozel siralama

Mesaj gönderen sr1111 »

merhaba
asağıdaki fonksiyonla listemi siralama yapiyorum ozel olarak, fakat yapmak istedigim @ ve q harflerini de k ile birlikte k ya eşit bir şekilde siralamak istiyorum, nasıl yapabilirim. j<k,q,@<l gibi bir şey olmasi lazim heralde.
HarfDizisi:String='aâbcçdefgğhıiîjkq@lmnoöprsştuüûvyz'; bu sekilde yaparsam k dan sonra geliyor.




function siralaoza(List: TStringList; Index1, Index2: Integer): Integer;
const
HarfDizisi:String='aâbcçdefgğhıiîjklmnoöprsştuüûvyzxwq';
var i1,i2,n1,n2,i,n:Integer; S1,S2:String; Devam:Boolean;
begin
Result:=0;
S1:=List[Index1];n1:=Length(S1);
S2:=List[Index2];n2:=Length(S2);
n:=n1;
if n1>n2 then begin
Result:=1;
n:=n2;
end else if n1<n2 then Result:=-1;
i:=1; Devam:=True;
while (i<=n) and Devam do begin
i1:=pos(S1,HarfDizisi);
i2:=pos(S2,HarfDizisi);
if i1>i2 then begin
Result:=1;
Devam:=False;
end else if i1<i2 then begin
Result:=-1;
Devam:=False;
end;
Inc(i);// --> i:=i+1;
end;
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: ozel siralama

Mesaj gönderen xxxjedixxx »

Çok anlaşılır bir soru değil ama anladığım kadarıyla yazdım. Dene bakalım istediğin bu mu?

Kod: Tümünü seç

function siralaoza(List: TStringList; Index1, Index2: Integer): Integer;
const HarfDizisi:String='aâbcçdefgğhıiîjklmnoöprsştuüûvyzxwq';
var i1,i2,n1,n2,i,n: Integer;
    S1,S2, C1, C2: string;
    Devam:Boolean;
begin
  Result:=0;
  S1:=List[Index1];n1:=Length(S1);
  S2:=List[Index2];n2:=Length(S2);
  n:=n1;
  if n1>n2 then begin
    Result:=1;
    n:=n2;
  end else if n1<n2 then Result:=-1;
  i:=1; Devam:=True;
  while (i<=n) and Devam do
  begin
// Burasını değiştirdim
    C1 := S1[i]; C2 := S2[i];
    if Pos(C1, '@q') > 0 then C1 := 'k'; // @ veya q ise k gibi işlem yapması için
    if Pos(C2, '@q') > 0 then C2 := 'k';
    i1:=pos(C1,HarfDizisi);
    i2:=pos(C2,HarfDizisi);
//***********************************
    if i1>i2 then
    begin
      Result:=1;
      Devam:=False;
    end else if i1<i2 then
    begin
      Result:=-1;
      Devam:=False;
    end;
    Inc(i);
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ozel siralama

Mesaj gönderen mrmarman »

ilüzyon ilüzyon...

1.Önce tüm @ olanları k@ ile değiştir.
2.Normal sıralama yap.
3.Sonra tüm @k olanlatı @ ile değiştir.


çok hızlı çözüm üretirsin.
Resim
Resim ....Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: ozel siralama

Mesaj gönderen sr1111 »

ustadim tesekkur ederim oldu.
bir sey soracagim, 3 veya 4 harfim oldugunda '@qxw' de k gibi olmasi icin bu satirlarin bu şekilde değişmesi yerterli mi.

if Pos(C1, '@qxw') > 0 then C1 := 'k';
if Pos(C2, '@qxw') > 0 then C2 := 'k';
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: ozel siralama

Mesaj gönderen xxxjedixxx »

Evet aynı şekilde bir çok harf için kullanabilirsin.
Cevapla