Delphi Can

Orjinalini görmek için tıklayınız: [+10 Puan] String Manipülasyon İşlemleri
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Merhaba,

Aşağıdaki işlemleri en pratik ve kısa yöntem ile yapan tüm arkadaşlara +10 puan verilecektir.

Not: Kullanılan yöntem ve yaklaşımın tekrar etmesi durumunda aynı yöntemden puan verilmeyecektir. Bu yüzden o yöntemi ilk kullanan puanı alır.


1. Sağdan N Karakter Alma (+2 Puan)

İçine verilen string değişkenin sonundan istenilen miktarda karakteri veren fonksiyon.


var
str:string;

begin
str := 'DelphiCan';
ShowMessage(SizinFonksiyon(str,3)); // Sondan 3 karakteri ver. Çıktı: "Can" olmalı.
end;

Dipnot: RightStr(value,3) bu işi gören System.StrUtils kütüphanesindeki bir fonksiyondur.


2. Seçilen yöne göre istenilen miktarda karakter alma (+5 Puan)

String verinin ilk/son üç karakterini alan fonksiyon.

var
str:string;

begin
str := 'DelphiCan';
ShowMessage(SizinFonksiyon(str,'L',3)); // Soldan 3 karakteri ver. Çıktı: "Del" olmalı.
ShowMessage(SizinFonksiyon(str,'R',3)); // Sağdan 3 karakteri ver. Çıktı: "Can" olmalı.
end;

3. Belirtilen string değerinin sondan N karakteri silme (+3 Puan)

String ve belirtilen miktarda karakteri soldan/sağdan silen fonksiyon.


var
str:string;

begin
str := 'DelphiCan';
ShowMessage(SizinFonksiyon(str,'L',6)); // Soldan 6 karakteri sil. Çıktı: "Can" olmalı.
ShowMessage(SizinFonksiyon(str,'R',3)); // Sağdan 3 karakteri sil. Çıktı: "Delphi" olmalı.
end;


Kolay gelsin!
Aşağıdaki kodlar Fonksiyon haline getirilince iş en kısa yoldan hallolur bence,

d:='DelphiCan';
ShowMessage('Sağdan 3 karakteri ver:'+copy(d,length(d)-2,3));
ShowMessage('Soldan 3 karakteri ver:'+copy(d,1,3));
delete(d,length(d)-2,3); // sağdan(sondan) 3 karakter sil
ShowMessage('Sağdan(sondan) 3 karakter silindi:'+d);
Bende ek soru sorayım en hızlı cevaplayana +4 Smile


verdiğim stringi sağdan veya soldan verdiğim karakter ile tamamlayacak.

function LeftPad(S: string; Ch: Char; Len: Integer): string;
function RightPad(S: string; Ch: Char; Len: Integer): string;
Buda Fonksiyon hali olsun.

type
  TIstenen = (ISagdanAl, ISoldanAl, IParcaAl, ISoldanSil, ISagdanSil);
....
....

Function StringManipule(Deger:String; Istenen:TIstenen; Basla, KacAdet:Integer):String;
Begin
If (Istenen=ISagdanAl)
   Then Result:=copy(Deger,length(Deger)-(KacAdet-1),KacAdet);
If (Istenen=ISoldanAl)
   Then Result:=copy(Deger,1,KacAdet);
If (Istenen=IParcaAl)
   Then Result:=copy(Deger,Basla,KacAdet);
If (Istenen=ISoldanSil)
   Then Begin
   Delete(Deger,1,KacAdet);
   Result:=Deger;
        End;
If (Istenen=ISagdanSil)
   Then Begin
   delete(Deger,length(Deger)-(KacAdet-1),KacAdet);
   Result:=Deger;
        End;

End;

procedure TForm2.Button1Click(Sender: TObject);
var
d:string;
begin
d:='DelphiCan';
memo1.Lines.Add('Sağdan 3 karakter:'+StringManipule(d,ISagdanAl,0,3));
memo1.Lines.Add('Soldan 3 karakter:'+StringManipule(d,ISoldanAl,0,3));
memo1.Lines.Add('Parca Al:'+StringManipule(d,IParcaAl,2,3)); // 2den basla 3 karakter
memo1.Lines.Add('Soldan 3 karakter sil:'+StringManipule(d,ISoldanSil,0,6));
memo1.Lines.Add('Sağdan 3 karakter sil:'+StringManipule(d,ISagdanSil,0,3));
end;

farklı bir bakış,

function SolDanAl(Text: String; Len: Integer): String;
var
 i: integer;
begin
 for I := 1 to Len do
   Result := Result + Text[i];
end;

function SagDanAl(Text: String; Len: Integer): String;
var
  i: integer;
begin
  for I := Length(Text) downto Len do
    Result := Text[i]+ Result ;
end;
Buda yakup hocanın istediği gibi sağına, soluna veya arada istediğiniz yere, istediğiniz karakterleri, istediğiniz kadar basan kod dahil;

type
  TIstenen = (ISagdanAl, ISoldanAl, IParcaAl, ISoldanSil, ISagdanSil, ISagaEkle, ISolaEkle, IArayaEkle);


Function StringManipule(Deger,Eklenecek:String; Istenen:TIstenen; Basla, KacAdet:Integer):String;
Var
X:Integer;
Parca:String;
Begin
If (Istenen=ISagdanAl)
  Then Result:=copy(Deger,length(Deger)-(KacAdet-1),KacAdet);
If (Istenen=ISoldanAl)
  Then Result:=copy(Deger,1,KacAdet);
If (Istenen=IParcaAl)
  Then Result:=copy(Deger,Basla,KacAdet);

If (Istenen=ISoldanSil)
  Then Begin
  Delete(Deger,1,KacAdet);
  Result:=Deger;
       End;

If (Istenen=ISagdanSil)
  Then Begin
  delete(Deger,length(Deger)-(KacAdet-1),KacAdet);
  Result:=Deger;
       End;

If (Istenen=ISagaEkle)
  Then Begin
  Parca := '';
  for x:= 1 to KacAdet do Parca := Parca + Eklenecek;
  Result:=Deger+Parca;
       End;

If (Istenen=ISolaEkle)
  Then Begin
  Parca := '';
  for x:= 1 to KacAdet do Parca := Parca + Eklenecek;
  Result:=Parca+Deger;
       End;

If (Istenen=IArayaEkle)
  Then Begin
  Parca := '';
  for x:= 1 to KacAdet do Parca := Parca + Eklenecek;
  Result:=copy(Deger,1,Basla)+Parca+copy(Deger,Basla+1,Length(Deger));
       End;

End;

procedure TForm2.Button1Click(Sender: TObject);
var
d:string;
begin
d:='DelphiCan';
memo1.Lines.Add('Sağdan 3 karakter:'+StringManipule(d,'',ISagdanAl,0,3));
memo1.Lines.Add('Soldan 3 karakter:'+StringManipule(d,'',ISoldanAl,0,3));
memo1.Lines.Add('Parca Al:'+StringManipule(d,'',IParcaAl,2,3)); // 2den basla 3 karakter
memo1.Lines.Add('Soldan 6 karakter sil:'+StringManipule(d,'',ISoldanSil,0,6));
memo1.Lines.Add('Sağdan 3 karakter sil:'+StringManipule(d,'',ISagdanSil,0,3));

memo1.Lines.Add('Sağa 3 karakter 5 Ekle:'+StringManipule(d,'5',ISagaEkle,0,3));
memo1.Lines.Add('Sola 3 karakter 5 Ekle:'+StringManipule(d,'5',ISolaEkle,0,3));
memo1.Lines.Add('Soldan 6 karakter sonra 3 tane 5 Ekle Devam Et:'+StringManipule(d,'5',IArayaEkle,6,3));
end;
c# ComObject hazırlarım

public string LeftPad(string s, int Len){
  return s.Substring(0, Len);
}
ve
uses ComObj;

procedure TForm2.btnClick(Sender: TObject);
var
oleObject: OleVariant;
begin
try 
  oleObject := CreateOleObject('CSLibrary.MyClass');
  ShowMessage('result= ' + oleObject.LeftPad('DelphiCan', 3));
except on E: Exception do
  ShowMessage('COM Error: ' + #13 + #10 + e.Message);
end;
end;
Hepsi bir arada. Çok doğru bulmuyorum ama hepsi bir arada oldu. Bazen kafa karışıklığına neden oluyor. Ayrı olması daha anlaşılır ve müdahale etmesi basit oluyor.
  TDirection = (tdLeft, tdRight);

  TFunctionMode = (fmGet, fmDel);
...
function getLeftRightStr(pSource: string; pCount: Integer; pDirection: TDirection = tdLeft; pMode: TFunctionMode = fmGet): string;
...
function TfrmMain.getLeftRightStr(pSource: string; pCount: Integer; pDirection: TDirection; pMode: TFunctionMode): string;
var
  n1, nLen: Integer;
begin
  nLen := Length(pSource);
  if pMode = fmGet then begin
    if pDirection = tdLeft then begin
      Result := MidStr(pSource, 1, pCount);
      //ShowMessage(getLeftRightStr('DelphiCan', 3, tdLeft, fmGet)); //Soldan 3 karakteri ver. Çıktı: "Del"
    end else if pDirection = tdRight then begin
      Result := MidStr(pSource, nLen-pCount+1, pCount);
      //ShowMessage(getLeftRightStr('DelphiCan', 3, tdRight, fmGet)); //Sağdan 3 karakteri ver. Çıktı: "Can"
    end;
  end else if pMode = fmDel then begin
    if pDirection = tdLeft then begin
      Result := MidStr(pSource, pCount+1, nLen-pCount);
      //ShowMessage(getLeftRightStr('DelphiCan', 6, tdLeft, fmDel)); //Soldan 6 karakteri sil. Çıktı: "Can"
    end else if pDirection = tdRight then begin
      Result := MidStr(pSource, 1, nLen-pCount);
      //ShowMessage(getLeftRightStr('DelphiCan', 3, tdRight, fmDel)); //Sağdan 3 karakteri sil. Çıktı: "Delphi"
    end;
  end;
end;
1. Sağdan N Karakter Alma
String __fastcall isoRightStr(String value, int count) {
return String(value.c_str() + (value.Length() - count));
}

void __fastcall TForm1::Button1Click(TObject *Sender) {
Caption = isoRightStr("DelphiCan", 3);
}
https://youtu.be/08abWuE-Gtc
Videonun üstüne de süper oldu valla Smile
Nöronlarınıza sağlık Cool
Sayfalar: 1 2