Metin içinde metin aramak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Metin içinde metin aramak

Mesaj gönderen CinAnka »

Merhabalar;

Elimde bir string var,ben bu stringin içerisinde belirli kelimeler varmı yok mu diye kontrol ettirmek istiyorum. String içerisinde aradığım kelimeler:

[##ad##]
[##soyad##]
[##adres##]
vs...

bu kelimeler okuduğum string içerisinde var mı yoksa yok mu nasıl kontrol ederim??

Teşekkür ederim...
Güçlü olan haklı değil, haklı olan güçlüdür!
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

pos() fonsksiyonunu kullnabilirsin.
replacestring fonksiyonu ile de direk değiştirebilirsin (uses kısmına strutils eklemek gerekebilir)
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

evet, Pos fonksiyonu ise yariyor. fakat ben toplamda 20 kelime kontrol ettirmek istiyorum. 20 defa ayni fonksiyonu kullanip 20 sonucu kontrol ettirmek, ve o sonuca gore baska islem yaptirmak cok mantikli gelmiyor programcilik kalitesi olarak. bunun icin kullanabilecegim baska bir yontem yok mu acaba??
Güçlü olan haklı değil, haklı olan güçlüdür!
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Dizi kullanmak biraz daha kısaltabilir;

Kod: Tümünü seç

var
  Arananlar: Array[1..20] of string;
  i:integer;
begin
  Arananlar[1]:='[##AD##]';
  Arananlar[2]:='[##SOYAD##]';
  //vs. vs.

  For i:=1 to 20 Do
  begin
    if AnsiPos(arananlar[i],metin)>0 Then 
    begin
      //işlemler
    end;
  end;
end;
gibi...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

ben javada benzer bir fonksiyon yazmıştım.
fonksiyon boolean bi değerle dönüyordu.

Kod: Tümünü seç

if (kelimelervarmi('ali merhaba bugün işler nasıldı? doktor hastalığın konusunda ne dedi?',['ali','işler','doktor']))=true then 
begin
....
end;
gibi bi kullanımı vardı. verilen stringde, verilen string dizisinin tüm elemanları var mı diye kontrol ediyordu. siz bu fonksiyonu delphi için yazarsanız güzel bir paylaşım olur.
kolay gelsin
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Kod: Tümünü seç

function TForm1.KelimelerVarMi(metin: string;
  kelimeler: array of string): Boolean;
var
  sonuc:boolean;
  i:integer;
begin
  sonuc:=True;
  For i:=Low(kelimeler) to high(kelimeler) do
  begin
    if AnsiPos(kelimeler[i],metin)=0 Then sonuc:=False;
  end;
  result:=sonuc;
end;
gibi mi?
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhaba,

Hangi yöntem olursa olsun illa bir döngü kullanman gererkecek. Ve illa bir POS işlevi kullanman gerekcek.

Ama Delphi'deki POS çok yavaş. Büyük metinlerde bunun etkisini görebilirsin.. Bunun yerine aşağıdaki adresten indireceğin POS ve benzeri String işlevlerini kullanmanı tavsiye ederim. Neredeyse %500 daha hızlı işlem yapıyor..

http://www.fastcode.dk/

Bu adamlar hızlı kod ileme ile ilgileniyorlar ve hatta yarışmalar düzenleniyor. Mesela en hızlı StringReplace kim yapacak diye..

Eskiden kendi uygulamamda, bir web sitsinin HTML kodlarını analiz yaparken bilindik POS ve AnsiReplaceString kullanırdım, şimdi bu kütüphaneyi kullanıyorum, resmen uçuyor..

Kolay glesin....
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

bakalım üstad....
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla