Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen hakanharbeli »

merhaba,
memo içinde bir makale var.

aşağıdaki kelimelerden birini bulursa diğer dördünden biriyle değiştirmesini istiyorum.

{hayatımızın|yaşamın|hayatımızın|yaşamımızın|yaşantımızın}


böyle bir şeyi php'de yazabiliyorlar bir türlü delphi'ye uyarlayamadım yazdığım uygulama için çok önemli bunu yazamazsam uygulamam pek bir işe yaramaz yardımlarınız için şimdiden teşekkür ederim iyi forumlar.
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 118
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen yhackup »

SynMemo adında bir komponet var
Memodan çok çok gelişmiş özelliklere sahip, bahsettiğiniz özellik bu komponette var.
Çaylak Delphici :D

Yakup ULUTAŞ
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen ertank »

hakanharbeli yazdı:merhaba,
memo içinde bir makale var.

aşağıdaki kelimelerden birini bulursa diğer dördünden biriyle değiştirmesini istiyorum.

{hayatımızın|yaşamın|hayatımızın|yaşamımızın|yaşantımızın}


böyle bir şeyi php'de yazabiliyorlar bir türlü delphi'ye uyarlayamadım yazdığım uygulama için çok önemli bunu yazamazsam uygulamam pek bir işe yaramaz yardımlarınız için şimdiden teşekkür ederim iyi forumlar.
Merhaba,

Değiştirilecek kelime dört seçenek içinden herhangi bir tanesi olabilir mi? Rastgele seçilebilir mi?
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen hakanharbeli »

tabiki olur hocam yeterki 5'inden birini bulursa diğer 4'ünden biriyle değişsin
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen hakanharbeli »

synmemo'yu da hemen araştırıyorum
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen SimaWB »

Memo içinde string arama/değiştirme için yeni bir komponent mi :shock:
Bunu tavsiye eden yhackup'u protesto ediyorum :alsana:
There's no place like 127.0.0.1
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen hakanharbeli »

abi synmemo'yu sabahtan beri deniyor didik didik ettim böyle bir şey bulamadım nasıl yapabilirim ?
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen ertank »

Aşağıdaki kodu deneyebilirsiniz.

Kod: Tümünü seç

function ReplaceFromWords(const MainText, WordsToFind: TStrings; const ReplaceAll: Boolean = False): string;

  function GetRandomIndex(const IndexToOmit, MaxIndex: Integer): Integer;
  var
    NewList: TArray<Integer>;
    Count, i: Integer;
  begin
    SetLength(NewList, MaxIndex-1);
    i := 0;
    Count := 0;
    while i < MaxIndex do
    begin
      if i <> IndexToOmit then
      begin
        NewList[Count] := i;
        Inc(Count);
      end;
      inc(i);
    end;

    Result := NewList[Random(MaxIndex)];
  end;

const
  Delimiters = [#0..#47, #58..#64, #91..#96, #123..#126];
var
  i, j, Index: Integer;
  P1, P2: Integer;
  Flags: TReplaceFlags;
begin
  Randomize;

  if MainText.Text = EmptyStr then
  begin
    Result := EmptyStr;
    Exit();
  end;

  Result := MainText.Text;

  if WordsToFind.Count = 0 then Exit();

  for i := 0 to Pred(WordsToFind.Count) do
  begin
    P1 := Pos(WordsToFind[i], Result);

    if P1 > 0 then
    begin
      P2 := 0;
      for j := P1 + 1 to Length(Result) do
      begin
        if Result[j] in Delimiters then
        begin
          P2 := j;
          Break;
        end;
      end;

      if P2 = 0 then P2 := Length(Result);

      Delete(Result, P1, P2-P1);

      Insert(WordsToFind[GetRandomIndex(i, WordsToFind.Count)], Result, P1);

      Exit();
    end;
  end;
end;
Kullanımı şöyle olacaktır:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Words: TStringList;
begin
  Words := TStringList.Create();
  try
    Words.Add('hayatımızın');
    Words.Add('yaşamın');
    Words.Add('yaşamımızın');
    Words.Add('yaşantımızın');
    Words.Add('yaşam');

    Memo1.Text := ReplaceFromWords(Memo1.Lines, Words);
  finally
    Words.Free();
  end;
end;
NOT: Yeni Delphi sürümlerine göre yazılmıştır. Delphi 7 kullanıyor iseniz birkaç yerde ayarlama gerektirir.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen SimaWB »

Memo içinde "hayatımızın" yerine "yaşamımızın" yazmanın en kolay yolu:

Kod: Tümünü seç

Memo1.Text := StringReplace(Memo1.Text, 'hayatımızın', 'yaşamımızın', [rfReplaceAll, rfIgnoreCase]);
Son parametredekilerin ne işe yaradığını araştırmak size kalsın.
There's no place like 127.0.0.1
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen ertank »

SimaWB yazdı:Memo içinde "hayatımızın" yerine "yaşamımızın" yazmanın en kolay yolu:

Kod: Tümünü seç

Memo1.Text := StringReplace(Memo1.Text, 'hayatımızın', 'yaşamımızın', [rfReplaceAll, rfIgnoreCase]);
Son parametredekilerin ne işe yaradığını araştırmak size kalsın.
Aşağıdaki gibi bir durumda rfReplaceAll sorun çıkaracaktır.

Kod: Tümünü seç

Memo1.Text := 'yaşamın en güzel anlarını yaşamak için. Sen çok yaşa';
Memo1.Text := StringReplace(Memo1.Text, 'yaşam', 'hayat', [rfReplaceAll, rfIgnoreCase]);
Sonuç aşağıdaki gibi olacaktır.
hayatın en güzel anlarını hayatak için. Sen çok yaşa

Tek doğru değiştirilmiş kelime son kelime olur bu durumda.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen SimaWB »

Soru şu şekilde:
hakanharbeli yazdı: aşağıdaki kelimelerden birini bulursa diğer dördünden biriyle değiştirmesini istiyorum.

{hayatımızın|yaşamın|hayatımızın|yaşamımızın|yaşantımızın}
Benim verdiğim cevap soruya uygun.

Tabi soruda şöyle bir hata var: "diğer dördünden biri".
Hangisi? Neye göre karar verilecek?
Bunu zaten soran kişi biliyordur sanırım :wink:
There's no place like 127.0.0.1
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 118
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: Memo İçinde Böyle Bir Arama Nasıl Yapılır?

Mesaj gönderen yhackup »

hakanharbeli yazdı:abi synmemo'yu sabahtan beri deniyor didik didik ettim böyle bir şey bulamadım nasıl yapabilirim ?

Yeterince etmemişin abi :) ,
Veli Hocamın bahsettiği Stringreplace işini görüyorsa onunla hallet daha gelişmiş bir şey bu,
Senin için yandexe attım bir çok özelliği var fazlası ile işini görür. sen özeleştirirsin kendine göre
https://yadi.sk/d/6S76n4B5uLNS2

Resim

Resim
Çaylak Delphici :D

Yakup ULUTAŞ
Cevapla