Delphi Can

Orjinalini görmek için tıklayınız: Delphi Boşluk Konumu
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Merhaba Arkadaşlar,
Editbox ıcınde girilen bilgideki en sondakı boslugun konumu yani soldan kacıncı karakterde oldugunu anlayabiliceğim önerebiliceğiniz kısa bir yol varmıdır ?
Aslında İsim ve Soyisim bilgisinden sadece soyadı bölümünden en baştaki  3 karakter koparmak ıstıyorum pos ıle alıyorum ama 3 parcalı olunca sıkıntı oluyor. Angel Dodgy
var
 SL: TStringList;
begin
 SL := TStringList.Create;
 try
   SL.Delimiter := ' ';
   SL.DelimitedText := 'Ali Veli 49 elli';
   // Bu şekilde kullandıktan sonra örneğin SL.Strings[1]'in değeri Ali, SL.Strings[2]'nin değeri 49 vs. olur.
 finally
   SL.Free;
 end;
Bir ara bana da lazim olmuştu. Mantik olarak yaziyi tersten yazdirdim. boylece soyad en basa gecti. boylece istediğim veriyi alabilmistim.

SimaWB benden once yazmis. O yontemi bilmiyordum. Teşekkürler.
Geri dönüşleriniz için çok sağolun arkadaşlar. İhtiyacı olana kullandığım şeklini paylaşabilirim.
Kimin ne zaman ihtiyacı olacağı belli olmaz. Siz paylaşın lütfen; muhakkak birisinin işine yaracaktır  Wink
var
  SL:TStringList;
begin
    DemirBasno:= txtKitaptur.Properties.Items[txtKitaptur.ItemIndex].Value; //KitapTur

    SL:=TStringList.Create;        //Yazarın soyismi
    try
      SL.Delimiter:=' ';
      SL.DelimitedText:=txtYazari.Text;
     if SL.Count>2 then
      DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[SL.Count-1],3);
     else
     DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[1],3);
      finally
      SL.Free;
    end;


İşime yarayan bölümü ise Ad-Soyad Textbox ıcın Soyadı bolumunun ılk 3 karakterıne ıhtıyacım vardı. Girilen değerin boslukları sayarak eger 3 parcadan oluşuyor ise sondakı boslukdan sonra 3 karakter al eger yok ise ilk boslukdan 3 karakter al dıyerek devam et.
(07-03-2017, Saat: 12:31)kasparov58 Adlı Kullanıcıdan Alıntı: [ -> ]SL:TStringList;
begin


    DemirBasno:= txtKitaptur.Properties.Items[txtKitaptur.ItemIndex].Value; //KitapTur

    SL:=TStringList.Create;        //Yazarın soyismi
    try
      SL.Delimiter:=' ';
      SL.DelimitedText:=txtYazari.Text;
     if SL.Count>2 then
      DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[2],3);
     else
     DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[1],3);
      finally
      SL.Free;
    end;

İşime yarayan bölümü ise Ad-Soyad Textbox ıcın Soyadı bolumunun ılk 3 karakterıne ıhtıyacım vardı. Girilen değerin boslukları sayarak eger 3 parcadan oluşuyor ise sondakı boslukdan sonra 3 karakter al eger yok ise ilk boslukdan 3 karakter al dıyerek devam et.

eğer dört yada daha fazla parçadan oluşur ise ne olacak.  SL.Strings[2] yerine SL.Strings[SL.Count-1] yazarak kullanırsanız daha doğru olacaktır.


SL:=TStringList.Create;        //Yazarın soyismi
   try
     SL.Delimiter:=' ';
     SL.DelimitedText:=txtYazari.Text;
     if SL.Count>0 then
       DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[SL.Count-1],3);
     finally
       SL.Free;
   end;
(07-03-2017, Saat: 13:54)AhmetBi Adlı Kullanıcıdan Alıntı: [ -> ]eğer dört yada daha fazla parçadan oluşur ise ne olacak.  SL.Strings[2] yerine SL.Strings[SL.Count-1] yazarak kullanırsanız daha doğru olacaktır.

O zaman hep aynı değeri elde etmeyecek mi? Metinden 2 parça kullanıyor, senin yaptığın gibi olursa hep tek parçanın değerini okuyacak gibi görünüyor.
(07-03-2017, Saat: 13:54)AhmetBi Adlı Kullanıcıdan Alıntı: [ -> ]
(07-03-2017, Saat: 12:31)kasparov58 Adlı Kullanıcıdan Alıntı: [ -> ]SL:TStringList;
begin


    DemirBasno:= txtKitaptur.Properties.Items[txtKitaptur.ItemIndex].Value; //KitapTur

    SL:=TStringList.Create;        //Yazarın soyismi
    try
      SL.Delimiter:=' ';
      SL.DelimitedText:=txtYazari.Text;
     if SL.Count>2 then
      DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[2],3);
     else
     DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[1],3);
      finally
      SL.Free;
    end;

İşime yarayan bölümü ise Ad-Soyad Textbox ıcın Soyadı bolumunun ılk 3 karakterıne ıhtıyacım vardı. Girilen değerin boslukları sayarak eger 3 parcadan oluşuyor ise sondakı boslukdan sonra 3 karakter al eger yok ise ilk boslukdan 3 karakter al dıyerek devam et.

eğer dört yada daha fazla parçadan oluşur ise ne olacak.  SL.Strings[2] yerine SL.Strings[SL.Count-1] yazarak kullanırsanız daha doğru olacaktır.

SL:=TStringList.Create; //Yazarın soyismi
try
SL.Delimiter:=' ';
SL.DelimitedText:=txtYazari.Text;
if SL.Count>0 then
DemirBasno:= DemirBasNo+'/'+LeftStr(SL.Strings[SL.Count-1],3);
finally
SL.Free;
end;

Dönüşünüz için teşekkür ederim.Doğru halini paylaştım.
(07-03-2017, Saat: 14:08)ramazan_t Adlı Kullanıcıdan Alıntı: [ -> ]
(07-03-2017, Saat: 13:54)AhmetBi Adlı Kullanıcıdan Alıntı: [ -> ]eğer dört yada daha fazla parçadan oluşur ise ne olacak.  SL.Strings[2] yerine SL.Strings[SL.Count-1] yazarak kullanırsanız daha doğru olacaktır.

O zaman hep aynı değeri elde etmeyecek mi? Metinden 2 parça kullanıyor, senin yaptığın gibi olursa hep tek parçanın değerini okuyacak gibi görünüyor.

SL.Count-1 her zaman son alanı verir.
Örneğin

Ali Veli Gedikli
SL.Strings[SL.Count-1] = Gedikli olur

Ali Veli Gedikli Boranoğlu
SL.Strings[SL.Count-1] = Boranoğlu olur
Sayfalar: 1 2