Ön tanımlı (Varsayılan) Seçenekle Veri İsteme

Giriş

Bu makalemde sizlere kullanıcının Enter tuşuna basarak varsayılan seçeneği veri girişi (uyarı cevabı) olarak kullanacağı çeşitli yollar anlatacağım.

Not 1: Veri isteminde (Uyarıda) Dizge “String“ Biçimi “Format”

Profesyonel görünümlü bir program oluşturmak için, genellikle AutoCAD tarafından kullanılan standart sorgulama biçimlendirmesine uymaya çalışırım. Bundaki ana fikirim minimum kullanıcı eğitimine sahip kullanıcıların da kolaylıkla kullanabileceği ile AutoCAD ortamına tamamen uyumlu bir uygulama yaratmaktır.

Dinamik Veri giriş “Dynamic Input” modu etkinleştirildiğinde mevcut seçeneklerin doğru bir şekilde görüntülenmesi için (yani DYNMODE = 1 olarak ayarlandığında), komut dizesinin aşağıdaki şekilde biçimlendirilmesi gerekir:

 

[Option1/Option2/Option3] <Option1>

Yukarıdaki örnekte Seçenek “Options1, 2 ve 3 kullanıcının seçmesi için verilmiş olup; Enter tuşuna basılarak varsayılan seçenek olan Seçenek “Options1 seçilebilir.

Not 2: Genel Değişkenlerde

Aşağıdaki örneklerde, programın tamamlanmasından sonra bir varsayılan seçeneği etkili bir şekilde “hatırlamak” için genel değişkenler kullanılır. Genel değişkenlerin nerede kullanıldığını belirtmek için, yıldız  (*) işareti değişken adlarına dahil edilir; bu, diğer programlardaki yerelleştirilmemiş değişkenlerle çakışma riskini de azaltır.

Yıldız (*) işareti, başka bir amaçla kullanılmaz – Bunlar LISP’de standart değişken adları oluştururlar.

Durum 1: Kullanıcıyı Veri Girmeye Zorlama (Varsayılan değil)

Bu, mevcut varsayılan seçeneği bulunmayan en basit durumdur. Kullanıcının mevcut seçeneklerden bir seçim yapmasını sağlamak için initget  fonksiyonu kullanılır. Dolayısıyla bu durumda, kullanıcının veri girişi sağlaması için koşullu bir hata yakalama gerekmemektedir, çünkü kullanıcının veri istemini (uyarıyı) atlatmasının tek yolu programdan çıkmaktır.

(initget 1 “Alfa Beta Gama”)

(setq ans (getkword “\n[Alfa/Beta/Gama] seçeneklerinden birini seçin: “))

initget  fonksiyonunun bit 1 kodu, kullanıcının Enter tuşuna basarak talebe yanıt vermesini engeller, böylece a, b ve c seçeneklerinden birini seçmeye zorlanır.

Durum 2: Ön Ayarlı Varsayılan Seçenek

Bu durumda, varsayılan seçenek mevcuttur, ancak her seferinde aynı seçenektir. Varsayılan seçenek, veri istem dizgesine sabit kodlanmıştır ve kullanıcıdan veri istemi yapıldığında,  Enter tuşuna basarak seçilebilir.

Sürüm 1

(initget “a b c”)

(setq ans (cond ( (getkword “\nSeçin [a/b/c] <a>: “) ) ( “a” )))

Yukarıdaki kodda, a seçeneği varsayılan seçenek olarak kodlanmıştır.

Kullanıcı komut isteminde enter tuşuna basarsa, getkword ifadesi boş “nil”  geri döndürür ve bu nedenle cond fonksiyonu bir sonraki test koşulunu değerlendirmeye devam eder: bu, boş “nil” olmayan bir değer olan a varsayılan dizgedir ve dolayısıyla cond fonksiyonu tarafından geri döndürülür.

Sürüm 2

(initget “Alfa Beta Gamma”)

(setq ans (getkword “\n Seçin [a/b/c] <a>:  “))

 (if (not ans) (setq ans “Alfa”))

Bu ikinci sürüm, ilki ile aynı mantığı kullanır; ancak şartlı cond işlemcisi bir if deyimi ile değiştirilmiştir. Dolayısıyla, ans değişkeni boş “nil “ise, varsayılan seçenek bu ans değişkenine bağlanır.

Durum 3: Dinamik Varsayılan

Bu durumda, * ans * değişkeninin genel bir değişken olması (kullanıldığı fonksiyon tanımında yerelleştirilmemesi) amaçlanmıştır. * ans * değişkeni genel bir değişken olduğu için, program tamamlandıktan sonra kendisine bağlı herhangi bir değeri kaybetmez.

Sürüm 1

(if (not *ans*) (setq *ans* “Alfa”))

 (initget “Alfa Beta Gamma”)

(setq *ans*

(cond

(

      (getkword

        (strcat “\nSeçin [Alfa/Beta/Gamma] <” *ans* “>: “)

      )

    )    ( *ans* )

  )

)

Yukarıdaki kodda, * ans * değişkeni önce boş “nil” olmayan bir değer için kontrol edilir: Bu, programın ilk çalıştırılmasında seçilecek bir varsayılan değerin olmasını sağlamak içindir.

Programın ilk çalışmasından sonra * ans * değişkeni boş “nil” olacak ve if ifadesi ona a değerini bağlayacak – böylece bu a seçeneği ilk kez varsayılan olacaktır.

Kullanıcı, komut isteminde Enter tuşuna basarsa, getkword ifadesi boş “nil” ve cond fonksiyonu * ans * değişkenini içeren bir sonraki test koşulunu değerlendirecekse, kodun geri kalanı önceki örneklerle aynı mantığı izler sağlanan (ilk if ifadesi ile) boş “nil” olmayan bir değere sahiptir ve böylece geri gönderilecektir.

Program ikinci kez çalıştırılırsa, * ans * değişkeni artık bir değer taşır ve bu nedenle if deyimindeki metin ifadesi boş “nil” değerini döndürür. Bu nedenle, aşağıdaki ifadelerde, * ans * değişkeninin önceki değeri varsayılan değer olarak kullanılır.

Sürüm 2

(or *ans* (setq *ans* “Alfa”))

(initgetAlpha Beta Gamma”)

(setq *ans*

(cond

    (

      (getkword

        (strcat “\nSeçin [Alfa/Beta/Gama] <” *ans* “>: “)

      )

    )

    ( *ans* )

  )

)

Önceki örnekteki ince bir varyasyonu olan bu kodda if ifadesinin yerine or fonksiyonu gelmiştir.

or fonksiyonu, sağlanan ifadeleri değerlendirecek fazla ifade yoksa veya bir ifade boş “nil” olmayan bir değer geri döndürene kadar değerlendirmeye devam edecektir.

Dolayısıyla yukarıdaki örnekte, * ans * değişkeninin boş “nil” olması durumunda or fonksiyonu * ans *  değişkenini ilk kez varsayılan değere ayarlayıp bir boş “nil” olmayan değeri geri döndürerek bir sonraki ifadeyi değerlendirmeye devam edecektir.

Sürüm 3

(initget “Alfa Beta Gamma”)

(setq *ans*

(cond

(

      (getkword

        (strcat “\nSeçin[Alfa/Beta/Gama] <“

  (setq *ans*

(cond ( *ans* ) ( “Alfa” ))

          )

          “>: “

  )

      )

    )

    ( *ans* )

  )

)

Bu son örnek, getkword  ifadesi içinde ilk kez bir varsayılan değeri ayarlama ifadesini içermektedir.

Getkword ifadesi cond fonksiyonuna sağlanan ilk test ifadesi olduğundan, önce değerlendirilir ve getkword ifadesi istem dizgesini oluşturmak için strcat fonksiyonunu kullanırken, kod önceki örneklerdeki aynı mantığı kullanarak * ans * değişkeninin bir değere sahip olmasını sağlar.

Kullanıcı şimdi son veri isteminde (uyarıda) Enter tuşuna basarsa bu değer, cond fonksiyonunun ikinci test ifadesinde döndürülür ve etkin bir şekilde hatırlanan varsayılan değer programın bir sonraki değerlendirmesinde kullanılır.

Örneklerin Ötesinde

Kullanılabilir varsayılan bir seçenekle kullanıcı veri girişinin nasıl istendiğini gösterdik. Tüm örneklerde, kullanıcıya veri istemi (uyarı) vermek için getkword fonksiyonunu kullandık; ancak, yukarıda gösterilen yöntemler ve mantık, diğer (getreal, getdist vb.) getXXX kullanıcı veri giriş fonksiyonlarının çoğunluğuna uygulanabilir.

Dinamik varsayılan durumunda, komut istemi dizgesi oluşturulurken veri türünün bir miktar dönüşümü gerekebilir, Böylece son örnek olarak:

(setq *ans*

(cond

(

      (getint

(strcat “\nSeçin a Number <“

(itoa

(setq *ans*

(cond ( *ans* ) ( 1 ))

            )

          )          “>: “

        )

      )

    )

    ( *ans*

)

)

* ans * değişkeninin varsayılan tamsayı değerini veri istem dizgesinin birleşiminde kullanılacak dizge “string” haline dönüştürmek için itoa (tamsayıyı ASCII koduna) ifadesi kullanılmaz.

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Filtreler Listesi

Revit’te çeşitli iletişim kutularında, kategorileri disipline göre filtrelemek için Filtre “Filter” listesini kullanabilirsiniz. Kategorilerini listelemek …

Bir cevap yazın

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.