String içinde kalıp string aratma..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
String içinde kalıp string aratma..
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.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Re: String içinde kalıp string aratma..
regex kelimesini arastirmaniz gerekecek
Re: String içinde kalıp string aratma..
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.
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.
Re: String içinde kalıp string aratma..
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.
Re: String içinde kalıp string aratma..
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
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...

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...

Re: String içinde kalıp string aratma..
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.
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;