sscanf ile daha esnek veri almak

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
22,068
Üzerinde çalıştığım bir programda, program kendi ismine göre işlem yapması gerekiyor:

Bash:
progname-card0
progname-card1
progname-card2
progname-card3

Burada programın en sonundaki rakam lazım. Bunu aşağıdaki kod parçası ile yaptım:

C:
int card;
if (sscanf(argv[0], "progname-card%d", &card) == 1)
{
   /* kart numarasi ile islem yap */
}
 
Ama sonra birisi programı progname-card0 şeklinde değil de /usr/bin/progname-card0 şeklinde kullandığını gördüm ve benim yukarıdaki kod doğru çalışmadı. Burada bize gereken, daha esnek ve string'in bazı bileşenlerinin yok sayılması. Linux gibi modern ve standartları yakından takip eden sistemlerde bunun için çok güzel, hem de standartlarda yer alan çözüm var. sscanf'in çok yaygın olarak bilinmeyen bir format yapısını kullanmak gerekiyor:

C:
int card;
if (sscanf(argv[0], "%*[^-]-card%d", &card) == 1)
{
    /* kart numarasi ile islem yap */
}

Buradaki format bir çeşit regexp formatı ve şu anlama geliyor: string'in başlangıcından itibaren - karakterini içermeyen bütün karakterleri izole et ve sonra da at. Format string'in geri kalanı zaten bildiğimiz standart kullanım. Böylece -card kısmının başına ne konursa konsun, mesela j/asdioewes/asdf/dwkowsdf-card0 buradan biz kart numarasını ayırabileceğiz.
 
Belki çok alakalı değil; ancak getopt ile de program argümanları alınıp işlenebilir.
 
Son düzenleme:

Çevrimiçi personel

Forum istatistikleri

Konular
5,982
Mesajlar
102,041
Üyeler
2,515
Son üye
karakemal

Son kaynaklar

Son profil mesajları

deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
Back
Top