StringReplace

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

StringReplace

Mesaj gönderen futbolcu »

Merhaba,

Kod: Tümünü seç

s := StringReplace(s,'ali','veli',[rfReplaceAll, rfIgnoreCase]);
şeklinde yazdığım zaman sözcükler içerisinde de bulunan 'ali' leri de "veli" lerle değiştiriyor örneğin"zerdali" sözcüğünü zerdveli olarak değiştiriyor. Oysa benim istediğim sadece ali, ALİ, Ali sözcüklerinin yerine "veli" getirmek istiyorum. Visual Basic'de bunu şöyle yapıyordum;

Kod: Tümünü seç

Tekst = Degistir("ali", "veli", Tekst)
Delphi'de bunu nasıl sağlarım :?:
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Boşluk kontrolü yapmayı denedinmi.

Kod: Tümünü seç

    s := StringReplace(s,' ali',' veli',[rfReplaceAll, rfIgnoreCase]);
bunun gibi.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Onu denedim ama olmadı ( tırnak içerisine #32 de ekledim yine olmadı)

Kod: Tümünü seç

  s := StringReplace(s,' ali',' veli',[rfReplaceAll, rfIgnoreCase]);
bu kez ali satırın başındaysa veli olmuyor :?
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4733
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman »

Merhaba... :o

- rfReplaceAll ve rfIgnoreCase belirteçleri kullanırken dikkatli olursanız aslında sorun olmayan sorununuzu çözmüş olursunuz.

- rfReplaceAll flağını kullanarak forced (zorunlu) yapılması gereken demişsiniz. Halbu ki zorunluluk burada kelime içinde geçenlerin kapsanıp kapsanmaması tercihiniz olduğunu biliniz...

- Bu flağı kaldırırsanız sadece kelimelere bakılır...

// Edit //
Yukarda yazdığım ifade hatalıdır... Lütfen dikkate almayınız...
Saygılarımla @mrmcop
En son mrmarman tarafından 24 Şub 2005 12:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim Resim
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Muharrem Hocam merhaba,
mrmcop yazdı: - rfReplaceAll ve rfIgnoreCase belirteçleri kullanırken dikkatli olursanız aslında sorun olmayan sorununuzu çözmüş olursunuz.
- Bu flağı kaldırırsanız sadece kelimelere bakılır...
demişsiniz. Doğrusu çözemedim. Hatta şöyle bir kod denedim. Bu da aynı sonucu veriyor.

Kod: Tümünü seç

memo1.Text:=ansirEplacetext(memo1.Text,' Ali ','veli ');
Bilgi çoğaldıkça krallar ölür
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bunu StringReplace ile yapamazsın. Önce metini kelime kelime ayırmalısın. Bunu yapmazsan zerdali'deki ali de değişecektir. Sanki makalelerde metni kelime kelime ayırma gibi bir kod görmüştüm.

"Ali Zerdali ali ahmet aliye" gibi bir metin olsun.

Bir döngü içinde kelime kelime ayırınca, kelimeleri tek tek elde edebileceksin. Bu sayede ali'ye eşit olanları değiştirebileceksin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4733
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman »

Evet yanlış ifade etmişim.. @coderlord haklı kelimelere bölmek gerekiyor...
Resim Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2129
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

Kod: Tümünü seç

s := StringReplace(s,'$ali$','$veli$',[rfReplaceAll]);
şeklinde yapılırsa cümle içerisinde kelime olarak geçen bütün aliler başarılı bir şekilde veli olur. manuel olarak bir de cümlenin başında ve sonunda ali geçiyor mu diye kontrol ederseniz istediğiniz olmuş olur. daha sonradan işin içine noktalama işaretleri girerse onlar için de biraz uğraşmak gerekir.

$ = boşluk
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

teşekkürler, dediğiniz yöntemle hallettim. Bu arada

Kod: Tümünü seç

memo1.Text:=ansirEplacetext(memo1.Text,' Ali ','veli ');
daha yararlı bir fonksiyon. en azından yanlışlıkla küçük yazılan ali yi de veli olarak değiştiriyor.
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 170
Kayıt: 01 Oca 2008 05:34

Re: StringReplace

Mesaj gönderen Commandx »

Arkadaşlar true değer nasıl döndürebiliriz?
Burda True değer döndürmek ihtiyacı hasıl olmuştur, aşağıda yarım kalmış fonksiyon üzerinden replace işleminin yapıldığını yapıldıysa true yapılmadıysa false değer döndürmesinide istiyorum

Kod: Tümünü seç

function string_degis( old: string; new: string ): boolean ; 
begin
result:= StringReplace(memo1.Text,old,new,[rfReplaceAll]);
end;
En son Commandx tarafından 07 Oca 2021 06:40 tarihinde düzenlendi, toplamda 5 kere düzenlendi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Function PARSE( text, ilk, son:String ): String; // XML de Çok Lazım oluyor
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
ikra
Üye
Mesajlar: 881
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: StringReplace

Mesaj gönderen ikra »

Pos ile text icinde ali var mi diye kontrol et. Varsa deger true döner, yoksa false.
kıdemsiz üye
ikra
Üye
Mesajlar: 881
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: StringReplace

Mesaj gönderen ikra »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);

  function Replace(AText, BText, CText: String): Boolean;
  var
    ReplacedText: String;
  begin
    ReplacedText := StringReplace(AText, BText, CText, [rfReplaceAll]);

    Result := not SameText(AText, ReplacedText);
  end;

begin
  if Replace('ALI TOPU TUT', 'ALI', 'VELI') then
    ShowMessage('Degisti')
  else
    ShowMessage('Degisen Yok');
end;
kıdemsiz üye
aligel54
Üye
Mesajlar: 38
Kayıt: 20 Nis 2009 11:34

Re:

Mesaj gönderen aligel54 »

futbolcu yazdı: 19 Şub 2005 06:44 Onu denedim ama olmadı ( tırnak içerisine #32 de ekledim yine olmadı)

Kod: Tümünü seç

  s := StringReplace(s,' ali',' veli',[rfReplaceAll, rfIgnoreCase]);
bu kez ali satırın başındaysa veli olmuyor :?
Bu sorun için de şu şekilde bir çözüme gidebilirsin.
Stringin başına ve sonuna birer boşluk ekle.
Sonra da tüm ' ali ' leri ' veli ' lerle değiştir.
Son olarak da eklediğin baş ve sondaki boşluğu sil.
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 170
Kayıt: 01 Oca 2008 05:34

Re: StringReplace

Mesaj gönderen Commandx »

Kod: Tümünü seç

function Replace(AText, BText, CText: String): Boolean;
  var
    ReplacedText: String;
  begin
    ReplacedText := StringReplace(AText, BText, CText, [rfReplaceAll, rfIgnoreCase]);
    Result := not SameText(AText, ReplacedText);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
aranan,degisen:STRING;
begin
  aranan:=EDIT1.Text;
   if Replace(EDIT1.TEXT , '.', ',')<>true then BEGIN
//    ShowMessage('Degisen Yok');
end;

if  Replace(aranan , '.', ',')=true then BEGIN
   degisen:=StringReplace(aranan, '.', ',',[rfReplaceAll, rfIgnoreCase]);
//showMessage('Degisti');
   EDIT1.Text:=degisen;
   MEMO1.Lines.Add(degisen);  
 End;
İstediğim buydu, kendime göre biraz düzenledim ve result deyiminin fonksiyon içindeki boolean olarak döndüğünü anladım . Teşekkürler
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Function PARSE( text, ilk, son:String ): String; // XML de Çok Lazım oluyor
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Cevapla