Skip to main content

AccessTr.neT


isim ekini bul

karaayhan
karaayhan
2
1598

isim ekini bul

#1
yazacağımız ismin son harfine göre;

Asım TEMİZ'e
Ali YILMAZ'a
Cemil İZGİ'yi
vs..
devam eden ekleri bulma yöntemini içeren örnek vardı sitede ama
arama yaptığımda bulamıyorum..
hatırlayan arkadaş varsa lütfen link yada örnek uygulamayı ekleyebilir mi?
teşekkürler..
Dünya düşünenler için bir komedi, Hissedenler için bir trajedidir ***
Hugh WALPOLE
Cevapla
#2
Aradığın şeyi sitede hiç görmedim ve aradım bulamadım. Ama tamamen teorik olmak üzere baz önerilerim olabilir. Hatalı da olabilir çünkü tamamen kurgusal önerilerdir.

Bunun için öncelikle özel ismin yazımında ' (kesme) işaretinin konulması şart olmalı. En azından iş bunun üzerinden olabilir. Tabii boşluk da olabilir. Yani soyadının yazılıp bittiği bir şekilde belirlenmeli ki ardına gelen ekler tahmin edilebilsin. İşaretten sonrası için

Left([SOYAD];InStr(1;[SOYAD];"'")-1)

kullanılmalı. Biraz yanlış anlamaya müsait olan "'" bölümü 2 tane tırnak içinde kesme işaretidir. Açık yazarsak " ' " şeklinde olur. Ama açık yazılmamalı. O zaman Asım TEMİZ ' e biçiminde olacaktır. Bu kodda değerler değişebilir, çünkü denemek lazım. Soyadının sonunda yer alan sesli harfi bulmak için falan instr kullanmayı iyi bilmek gerekiyor. Bunun için aşağıdaki örnek işine yarayacaktır. Hem instr hem de len kullanımına iyi bir örnektir.

Alıntı:Yan yana virgülle sıralanmış değerleri ayırıp tabloya tek tek yazdırmak gerekiyordu.

Dim bolum1, bolum2 as integer
Dim Metin1,Metin2,Metin3 as string

bolum1=instr(Anametin,",")
'ilk virgülün yerini buluyoruz
metin1=left(Anametin,bolum1-1)
'Ana metinden virgüle kadar olan kısmı alıp Metin1 değeri elde ediyoruz.
bolum2=instr(bolum1+1,Anametin,",")
'2.virgülün yerini bulmak için "bolum1+1" instr fonksiyonunda kaçıncı
'karakterden sonra arama yapacağını belirtir.
metin2=mid(Anametin,bolum1+1,bolum2 -(bolum1+1))
'anametinin ilk virgülden sonraki kısmından ikinci virgülü bulduğumuz
'kısımdan ilk virgülden sonrakini çıkararak bulduğumuz uzunluk kadar
'karakteri al Metin2 adlı değişkene ata.
Metin3=right(Anametin,(len(anametin)-bolum2+1))
'Anametinin sağdaki kısmundan 2.virgüle kadar olan kısmı metin3 değişkenine
'atıyoruz.

Gelelim eklerin olayına. Burada bu isme gelmesi gereken eklerin de bir modülde falan tanımlanması lazım. Şöyle ki diyelim 'e eki duruma göre 'ye olacak. Bu durumda yukarda gösterdiğim yöntemle SOYAD değerinin son harfi bulunacak ve sesli mi sessiz mi olduğunda bakılacak. (Bunun için bir case select veya if then olayı yapılır artık) Yine modülün içine case select ile soyadının sonundaki harfe ve son sesli harfe bakılarak yorumlanır. Buradaki sesli-sessiz olayı için de aynı deminki modül kullanılır.

Biraz karışık gelebilir ama eğer hazır yapılmış bir çalışma yoksa daha mantıklı bir çözüm de yok sanırım.
İnadına, ille de Accesstr.net...
Cevapla
#3

Option Compare Database
Public Function İsimEkiniBul(geçici2 As String)
Dim i As Integer
For i = 1 To 3
İsimEkiniBul = UCase(Left(Right(Trim(geçici2), i), 1))
If InStr(1, "AIEİOUÖÜ", İsimEkiniBul) Then Exit For
Next i
If Asc(İsimEkiniBul) = 253 Or Asc(İsimEkiniBul) = 73 Then
geçici2 = "ı"
Else
Select Case İsimEkiniBul
Case "E", "İ": geçici2 = "i"
Case "O", "U": geçici2 = "u"
Case "Ö", "Ü": geçici2 = "ü"
Case Else: geçici2 = "ı"
End Select
End If
İsimEkiniBul = "'n" & geçici2 & "n"
If i > 1 Then İsimEkiniBul = "'" & geçici2 & "n"
End Function

kullanımı ise;
İsimEkiniBul([Soyadı])
Dünya düşünenler için bir komedi, Hissedenler için bir trajedidir ***
Hugh WALPOLE
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task