String içinde kalıp string aratma..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

String içinde kalıp string aratma..

Mesaj gönderen varyemez »

Uzun bir string içinde 17??????10 kalıbında (başında 17 , sonunda 10 , arada da 6 herhangi karakter ) olan stringin başlangıç noktasını bulmak istiyorum.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: String içinde kalıp string aratma..

Mesaj gönderen sadettinpolat »

regex kelimesini arastirmaniz gerekecek
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
seho
Üye
Mesajlar: 51
Kayıt: 01 Nis 2008 12:40

Re: String içinde kalıp string aratma..

Mesaj gönderen seho »

kendin bir fonksiyon yazarak ta yapabilirsin.

Alagoritma Sıralaması şu şekilde olabilir.

1. String içerisindeki kelimeleri bir diziye aktarma.
2. Oluşturduğun diziyi döngüye alıp. Sirayala başında 17 sonunda 10 kelimesi kontrolünü yap.
3. Kelimenin başında ve sonunda 17 ve 10 değeri yoksa. dizinin bir sonraki elamanına geçersin.
4. Kelimenin başında ve sonunda 17 ve 10 değeri var iser kelime içerisinde AnsiPos ile 6 değerini aratırırsın. Geri değer 0 ise değer kelime içerisinde yoktur bir sonraki elemana geçersin. Değer sıfırdan farklı ise 6 değeri kelimede vardır dönen değeri fonksiyona aktarırsın ve Break ile döngüyü sonlandırırsın.

Kabaca oldu biraz algoritma ama bu şekilde bir fonksiyon yaparak sürekli kullanabilirsin. İstersen fonksiyona arama yapılacak stringden hariç kelimelerin başlarında ve sonlarında hangi değerleri arattırmak istediğinide gönderirsen daha dinamik bir fonksiyon yapabilirsin.

Kod kısmında kullanacağın delphi fonksiyonları AnsiPos ve Copy yeterli olacaktır.

İyi çalışmalar.
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: String içinde kalıp string aratma..

Mesaj gönderen varyemez »

kelimelerden oluşmuyor , arada hiç boşluk yok max 255 karaktere kadar olabilen ve arada kontrol karakterleri de olan (Chr29 chr22 tab enter falan) bir zincir.. Tedit içine keypress ile dökülerek alınıyor barkod aletinin bir başka türü Datamatrix yani. onun içinde 17yyaagg10 kalıbında tarih değerini ayırmak derdim.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: String içinde kalıp string aratma..

Mesaj gönderen unicorn64 »

regex makul bir çözüm. ama manuel olarak kendin de parse edebilirsin:

1- stringi al, aIndex:=0
2- PosEx ile string içinde aIndexten başlayarak '17' değerini ara bulursa indexi döner
3- '17' nin indexi üzerinden '10' u kontrol et
a- bulursan copy ile ifadeyi al aIndexi '10' un indexinden 2 fazla olarak ayarla 2. adıma dön
b- bulamazsan aIndexi '17' nin indexinden 2 fazla olarak ayarla 2. adıma dön
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: String içinde kalıp string aratma..

Mesaj gönderen emin_as »

Aşagıdaki fonksiyon işini görür.
S de bilgilerin var, dönüş yazısı aradıgın bilgi (yyaagg) olacak, eger bulamazsa bilgi boş dönüyor.

Kod: Tümünü seç

function bilgiAl( s: string):string;
var
  i1,i2: integer;
begin
   result:='';
   i1:=pos('17',s);
   i2:=pos('10',s);
   if (i2-i1) = 8 then result:=copy(s,i1+2,6);
end;
Cevapla