• 13-09-2013, 02:37:34
    #1
    Memo1
    Ali eve geldi. Ahmet basketbol oynadı

    eve-->geldi
    geldi-->gitti
    basketbol-->futbol

    Memo2
    Ali okula gitti. Ahmet futbol oynadı

    Butona basılınca eve kelimesi okul, geldi kelimesi gitti, basketbol kelimeside yine aynı şekil futbol olarak değişmesini istiyorum bunu nasıl yapabilirim kelimeleri ben önceden verecem verdiğim kelimelerde yoksa bulunamadı gibi bi mesaj çıksın
  • 13-09-2013, 02:46:32
    #2
    Delphi - String - replace anahtar kelimelerini araştırırsanız bir çok kaynak bulabilirsin.

    var
    once, sonra : string;

    begin
    once := 'Ali eve geldi. ';

    sonra := StringReplace(once, ' eve ', ' okul',
    [rfReplaceAll, rfIgnoreCase]);
    ShowMessage('Sonra = '+sonra);
    end;


    -------------------------------

    kelime:='Ali eve gitti.'



    yenikelime := ReplaceStr(kelime,'eve','okul');
  • 13-09-2013, 14:44:48
    #3
    GOKBERK adlı üyeden alıntı: mesajı görüntüle
    Delphi - String - replace anahtar kelimelerini araştırırsanız bir çok kaynak bulabilirsin.

    var
    once, sonra : string;

    begin
    once := 'Ali eve geldi. ';

    sonra := StringReplace(once, ' eve ', ' okul',
    [rfReplaceAll, rfIgnoreCase]);
    ShowMessage('Sonra = '+sonra);
    end;


    -------------------------------

    kelime:='Ali eve gitti.'



    yenikelime := ReplaceStr(kelime,'eve','okul');


    hocam tşkler yaptım

    eve - okul
    ali - ahmet
    ayşe - fatma

    gibi böyle değerler 50 den fazla olacak bunları bir yere koyup kelimeyi bulup değiştirmesini nasıl sağlarım ?
  • 13-09-2013, 16:03:15
    #4
    Delphi konusunda bilgim yok fakat yöntemi söyleyim siz yapın hocam.

    İki tane string dizisi oluşturacaksın.
    http://www.delphibasics.co.uk/Article.asp?Name=Arrays
    1.sinin adı bul
    2.sinin adı degistir olsun.
    50lik açarsın dizi uzunluğunu ben 3 lük gösteriyorum örnek açısından.
    const
    bul : array[1..3] of string = ('resim','ad','doktor');
    const
    degistir : array[1..3] of string = ('fotograf','isim','hekim');

    Eş anlamlıları dikkat ettiysen aynı indislere koydum dizi içerisinde. Daha sonra for döngüsüne sok dizi elemanlarını teker teker denesin.

    var
    i : Integer;

    begin
    //3kere arama yapsın
    For i := 1 to (6 div 2) do
    kelime := ReplaceStr(kelime,'bul[i]','degistir[i]');end;

    Bu döngü ile örneğin
    resim kelimesini bulursa fotoğraf ile
    ad kelimesini bulursa isim ile
    doktor kelimesini bulursa hekim ile
    değiştirecektir.

    Not: Delphi konusunda bilgim yok kodsal hatalarım olabilir .
  • 19-09-2013, 02:50:59
    #5
    GOKBERK adlı üyeden alıntı: mesajı görüntüle
    Delphi konusunda bilgim yok fakat yöntemi söyleyim siz yapın hocam.

    İki tane string dizisi oluşturacaksın.
    http://www.delphibasics.co.uk/Article.asp?Name=Arrays
    1.sinin adı bul
    2.sinin adı degistir olsun.
    50lik açarsın dizi uzunluğunu ben 3 lük gösteriyorum örnek açısından.
    const
    bul : array[1..3] of string = ('resim','ad','doktor');
    const
    degistir : array[1..3] of string = ('fotograf','isim','hekim');

    Eş anlamlıları dikkat ettiysen aynı indislere koydum dizi içerisinde. Daha sonra for döngüsüne sok dizi elemanlarını teker teker denesin.

    var
    i : Integer;

    begin
    //3kere arama yapsın
    For i := 1 to (6 div 2) do
    kelime := ReplaceStr(kelime,'bul[i]','degistir[i]');end;

    Bu döngü ile örneğin
    resim kelimesini bulursa fotoğraf ile
    ad kelimesini bulursa isim ile
    doktor kelimesini bulursa hekim ile
    değiştirecektir.

    Not: Delphi konusunda bilgim yok kodsal hatalarım olabilir .



    procedure TForm1.Button1Click(Sender: TObject);

    const
    bul : array[1..6] of string = (
    'resim',
    'ad',
    'doktor',
    'fotograf',
    'isim',
    'hekim'
    );


    const
    degistir : array[1..6] of string = (
    'fotograf',
    'isim',
    'hekim',
    'resim',
    'ad',
    'doktor'
    );


    var
    i : Integer;
    Metin, Sonuc : AnsiString;
    begin
    Metin := memo1.text;
    For i := 1 to (6 div 2) do
    metin := StringReplace(metin ,bul[i],degistir[i],[rfReplaceAll, rfIgnoreCase]);
    memo2.Text := metin;
    end;



    bu şekilde ilk 3 kelme çalışıyor
    resim fotograf oluyor ama fotograf yazınca resim olmuyor hocam
  • 19-09-2013, 09:46:59
    #6
    döngüyü 3 kere çalıştırdığın için ilk 3 dize elemanına kadar bakıyor. döngüyü dize sayısı kadar çevir. for i:= 1 to (6div2) do yerine for i:=1 to DIZESAYISI do
  • 19-09-2013, 16:18:04
    #7
    zinan adlı üyeden alıntı: mesajı görüntüle
    döngüyü 3 kere çalıştırdığın için ilk 3 dize elemanına kadar bakıyor. döngüyü dize sayısı kadar çevir. for i:= 1 to (6div2) do yerine for i:=1 to DIZESAYISI do
    hocam halletim teşkkürler birde resim fotogram oluyor ama fotograf resim olmuyor bunu nasıl çözerim
  • 19-09-2013, 19:09:26
    #8
    şimdi aynı döngü içinde komple metni verdiğin için, dize içinde sırayda değiştiriyor.şöyle garip bir yöntem var en basit haliyle,

    procedure TForm1.Button1Click(Sender: TObject);
    const
    kelimeler : array[0..2] of string  = ('resim','ad','hekim');
    esanlamlilar : array[0..2] of string = ('fotograf','isim','doktor');
    var
      i,j : Integer;
      metin : string;
    begin
      Memo2.Lines.Clear;
      for j := 0 to Memo1.Lines.Count - 1 do
      begin
        metin := Memo1.Lines[j];
        For i := 0 to Length(kelimeler) -1 do
        begin
           if AnsiPos(kelimeler[i],metin)>0 then
            metin := StringReplace(metin ,kelimeler[i],esanlamlilar[i],[rfReplaceAll, rfIgnoreCase])
           else
            metin := StringReplace(metin ,esanlamlilar[i],kelimeler[i],[rfReplaceAll, rfIgnoreCase])
        end;
        memo2.Lines.Add(metin);
      end;
    end;
    önce kelimeler dizesinde arıyor bulursa değiştiriyor bulamazsa esanlamlilar dizesinde arıyor.
  • 20-09-2013, 01:59:37
    #9
    zinan adlı üyeden alıntı: mesajı görüntüle
    şimdi aynı döngü içinde komple metni verdiğin için, dize içinde sırayda değiştiriyor.şöyle garip bir yöntem var en basit haliyle,

    procedure TForm1.Button1Click(Sender: TObject);
    const
    kelimeler : array[0..2] of string  = ('resim','ad','hekim');
    esanlamlilar : array[0..2] of string = ('fotograf','isim','doktor');
    var
      i,j : Integer;
      metin : string;
    begin
      Memo2.Lines.Clear;
      for j := 0 to Memo1.Lines.Count - 1 do
      begin
        metin := Memo1.Lines[j];
        For i := 0 to Length(kelimeler) -1 do
        begin
           if AnsiPos(kelimeler[i],metin)>0 then
            metin := StringReplace(metin ,kelimeler[i],esanlamlilar[i],[rfReplaceAll, rfIgnoreCase])
           else
            metin := StringReplace(metin ,esanlamlilar[i],kelimeler[i],[rfReplaceAll, rfIgnoreCase])
        end;
        memo2.Lines.Add(metin);
      end;
    end;
    önce kelimeler dizesinde arıyor bulursa değiştiriyor bulamazsa esanlamlilar dizesinde arıyor.

    hocam çok tşkler uyguladım ama şimdide resim fotograf yazdığım zaman fotograf fotograf oluyor