Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Copy Fonksiyonu
#1
Copy ile string'in(yada  array'in) bir kısmını başka bir string'e (array'a) kopyalabiliyoruz.
Fonksiyonun tanımı şu şekilde:
function Copy(S: <string or dynamic array>; Index: Integer; Count: Integer): string;

Basit kullanım örneği:
var
  S1, S2: string;
begin
  S1 := 'Merhaba';
  S2 := Copy(S1, 2, 2);
  // S2 = 'er' 
end;

S1'in ikinci karakterinden sonuna kadarlık kısmını kopyalamak istersek:
  S2 := Copy(S1, 2, Length(S1)-1);
  // S2 = 'erhaba'
end;

Böyle bir kullanımda sürekli Length ile ilk stringin uzunluğunu kontrol etmek yerine çok uzun bir değer de girilebilir:
  S2 := Copy(S1, 2, 1000);
  // S2 = 'erhaba'
Sonuç yine aynı olacaktır. Burada 1000 yada çok daha büyük bir değer kullansanız da(Mesela MaxInt sabiti kullanılabilir) fonksiyon size S1'n geri kalanını döndürecektir. Yıllardır ben bu gibi durumlarda 1000 kullanırdım Sad
Ta ki geçenlerde bir yazı okuyuncaya kadar.  O yazıyı okuduktan sonra öğrendim ki Copy(S1, 2, 1000) ile Copy(S1, 2) aynı sonucu veriyor.  Idea 

Yıllardır boşuna 1000 yazıyormuşum  Big Grin


Not: Şuanda kullandığım PC'de Delphi 5 yüklü ve onda son parametre zorunlu olarak istiyor. Demek ki bir versiyondan sonra eklenmiş bir özellik
Not2: Neden Delphi 5 yüklü sormayın Smile
There's no place like 127.0.0.1
WWW
Cevapla
#2
Paylaşım için teşekkürler.
Cevapla
#3
çok sık kullandığım bir fonksiyon özellekle midstr gibi ek uses istemedği için tercih ediyorum
Cevapla
#4
Java ve C# da böyşe idi, bende xe2 de ya length ya da senün gibi 1000 kullanıyordum. Sanırım xe2 de de yok seatle da da deneyeyim bakalım var mı..
WWW
Cevapla
#5
Wink 
(29-06-2018, Saat: 13:25)yhackup Adlı Kullanıcıdan Alıntı: Java ve C# da böyşe idi,  bende xe2 de ya length ya da senün gibi 1000 kullanıyordum.  Sanırım xe2 de de yok seatle da da deneyeyim bakalım var mı..

xe2 de mevcut  Wink
Cevapla
#6
(29-06-2018, Saat: 10:55)SimaWB Adlı Kullanıcıdan Alıntı: Copy ile string'in(yada  array'in) bir kısmını başka bir string'e (array'a) kopyalabiliyoruz.
Fonksiyonun tanımı şu şekilde:
function Copy(S: <string or dynamic array>; Index: Integer; Count: Integer): string;

Basit kullanım örneği:
var
  S1, S2: string;
begin
  S1 := 'Merhaba';
  S2 := Copy(S1, 2, 2);
  // S2 = 'er' 
end;

S1'in ikinci karakterinden sonuna kadarlık kısmını kopyalamak istersek:
  S2 := Copy(S1, 2, Length(S1)-1);
  // S2 = 'erhaba'
end;

Böyle bir kullanımda sürekli Length ile ilk stringin uzunluğunu kontrol etmek yerine çok uzun bir değer de girilebilir:
  S2 := Copy(S1, 2, 1000);
  // S2 = 'erhaba'
Sonuç yine aynı olacaktır. Burada 1000 yada çok daha büyük bir değer kullansanız da(Mesela MaxInt sabiti kullanılabilir) fonksiyon size S1'n geri kalanını döndürecektir. Yıllardır ben bu gibi durumlarda 1000 kullanırdım Sad
Ta ki geçenlerde bir yazı okuyuncaya kadar.  O yazıyı okuduktan sonra öğrendim ki Copy(S1, 2, 1000) ile Copy(S1, 2) aynı sonucu veriyor.  Idea 

Yıllardır boşuna 1000 yazıyormuşum  Big Grin


Not: Şuanda kullandığım PC'de Delphi 5 yüklü ve onda son parametre zorunlu olarak istiyor. Demek ki bir versiyondan sonra eklenmiş bir özellik
Not2: Neden Delphi 5 yüklü sormayın Smile

DelphiCan içerik oluşumuna sağladığınız katkılarınızdan dolayı teşekkür ederim.
Belirttiğiniz referansın linkini paylaşayım: Delphi sürprizlerle dolu!
Delphi Can'dır!
WWW
Cevapla
#7
(29-06-2018, Saat: 13:34)vkamadan Adlı Kullanıcıdan Alıntı:
(29-06-2018, Saat: 13:25)yhackup Adlı Kullanıcıdan Alıntı: Java ve C# da böyşe idi,  bende xe2 de ya length ya da senün gibi 1000 kullanıyordum.  Sanırım xe2 de de yok seatle da da deneyeyim bakalım var mı..

xe2 de mevcut  Wink


Alışkanlık , bende diyorum java da var c# da var delphide nasıl olmaz Smile

peki Copy nerede ?  Ben bulamadım , System içerisinde bu var.

function _Copy(const S: ShortString; Index, Count: Integer): ShortString;
{$IFDEF PUREPASCAL}
var
 Len, I: Integer;
begin
 Len := Byte(S[0]);
 if Len = 0 then
   Byte(Result[0]) := 0
 else
 begin
   if Index <= 0 then Index := 1
   else
   if Index > Len then Count := 0;
   Len := Len - Index + 1;
   if Count < 0 then Count := 0
   else if Count > Len then Count := Len;
   Byte(Result[0]) := Count;
   for I := 1 to Count do
     Result[I] := S[Index + I - 1];
 end;
end;
WWW
Cevapla
#8
(29-06-2018, Saat: 14:05)yhackup Adlı Kullanıcıdan Alıntı:
(29-06-2018, Saat: 13:34)vkamadan Adlı Kullanıcıdan Alıntı: xe2 de mevcut  Wink


Alışkanlık , bende diyorum java da var c# da var delphide nasıl olmaz Smile

peki Copy nerede ?  Ben bulamadım , System içerisinde bu var.

function _Copy(const S: ShortString; Index, Count: Integer): ShortString;
{$IFDEF PUREPASCAL}
var
 Len, I: Integer;
begin
 Len := Byte(S[0]);
 if Len = 0 then
   Byte(Result[0]) := 0
 else
 begin
   if Index <= 0 then Index := 1
   else
   if Index > Len then Count := 0;
   Len := Len - Index + 1;
   if Count < 0 then Count := 0
   else if Count > Len then Count := Len;
   Byte(Result[0]) := Count;
   for I := 1 to Count do
     Result[I] := S[Index + I - 1];
 end;
end;
Ben delphi Berlin Update 2  system içinde
   class procedure Copy(Src: TArray<Byte>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
    class procedure Copy(Src: TPtrWrapper; Dest: TArray<Byte>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Char>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Char>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Word>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Word>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Shortint>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Shortint>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Smallint>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Smallint>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Integer>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Integer>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<Int64>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<Int64>; StartIndex: Integer; Count: Integer); overload;
   class procedure Copy(Src: TArray<TPtrWrapper>; StartIndex: Integer; Dest: TPtrWrapper; Count: Integer); overload;
   class procedure Copy(Src: TPtrWrapper; Dest: TArray<TPtrWrapper>; StartIndex: Integer; Count: Integer); overload;

  bunları görüyorum
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#9
(29-06-2018, Saat: 14:05)yhackup Adlı Kullanıcıdan Alıntı: peki Copy nerede ?  Ben bulamadım , System içerisinde bu var.

Burada onun cevabı verilmiş:
https://stackoverflow.com/a/6056605/62313

Bu ipucunu yazdıktan sonra gördüm:
Copy'yi son parametresi olmadan kullanmak isterseniz ve x64 için derleme yapacaksanız ve XE3 Update1'den öncesi kullanıcısı iseniz dikkat:
http://qc.embarcadero.com/wc/qcmain.aspx?d=113805
There's no place like 127.0.0.1
WWW
Cevapla
#10
(29-06-2018, Saat: 10:55)SimaWB Adlı Kullanıcıdan Alıntı: Copy ile string'in(yada  array'in) bir kısmını başka bir string'e (array'a) kopyalabiliyoruz.
Fonksiyonun tanımı şu şekilde:
function Copy(S: <string or dynamic array>; Index: Integer; Count: Integer): string;

Basit kullanım örneği:
var
  S1, S2: string;
begin
  S1 := 'Merhaba';
  S2 := Copy(S1, 2, 2);
  // S2 = 'er' 
end;

S1'in ikinci karakterinden sonuna kadarlık kısmını kopyalamak istersek:
  S2 := Copy(S1, 2, Length(S1)-1);
  // S2 = 'erhaba'
end;

Böyle bir kullanımda sürekli Length ile ilk stringin uzunluğunu kontrol etmek yerine çok uzun bir değer de girilebilir:
  S2 := Copy(S1, 2, 1000);
  // S2 = 'erhaba'
Sonuç yine aynı olacaktır. Burada 1000 yada çok daha büyük bir değer kullansanız da(Mesela MaxInt sabiti kullanılabilir) fonksiyon size S1'n geri kalanını döndürecektir. Yıllardır ben bu gibi durumlarda 1000 kullanırdım Sad
Ta ki geçenlerde bir yazı okuyuncaya kadar.  O yazıyı okuduktan sonra öğrendim ki Copy(S1, 2, 1000) ile Copy(S1, 2) aynı sonucu veriyor.  Idea 

Yıllardır boşuna 1000 yazıyormuşum  Big Grin


Not: Şuanda kullandığım PC'de Delphi 5 yüklü ve onda son parametre zorunlu olarak istiyor. Demek ki bir versiyondan sonra eklenmiş bir özellik
Not2: Neden Delphi 5 yüklü sormayın Smile


Hocem ben sorucam walla Neden Delphi 5 Diye.. (Ama aklıma gelen ilk cevap, Kullanılan Component paketlerinin artık üst versiyonlarının çıkmayışı oldu..) öylemi dir? Smile
// Bilgi paylaştıkça çoğalır.. 

Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi