Filtre Örnekleri
Filtre Örnekleri
Bir testten beklenen ve gerçek sonuçların, üç alanı değiştiren tek bir filtrenin uygulanmasıyla nasıl değişeceğini gösterir: iş numarası, tarih ve saat.
Bu durumda filtre, düzenli ifadeler kullanarak dize değiştirmelerini destekleyen çok sayıda araçtan herhangi biri kullanılarak uygulanabilir. Her alan türü için bir tane olmak üzere üç normal ifade gereklidir. Bunlar, aşağıdaki Perl betiğinde kalın yazı tipiyle gösterilmiştir.
Bu, Perl’de kodlanmış gerekli filtreyi uygulamak için tüm programdır. Perl deneyimi olmayan okuyucuların bunu anlamasını beklemiyoruz, bunun yerine yararlı bir filtre uygulamak için ne kadar az çalışmanın gerekli olduğuna şaşırıyoruz.
Farklı araçların ve dillerin farklı normal ifade uygulamalarına sahip olduğunu unutmayın, bu nedenle bu örnekler tüm araçlar için çalışmaz. Özlü yapılar sunduğundan, Perl sürüm 5.002 veya sonraki sürümleri tarafından uygulanan düzenli ifadelerin bir lehçesini kullanmayı seçtik.
Bir tarih dizisini eşleştirmeye çalışan yukarıdaki Perl betiğinde verilen normal ifade belki de çok basittir. Olduğu gibi, geçersiz bir tarihle eşleşecek, örn. 45-Abc-99 ama 6-Nis-99 ile eşleşmiyor.
Bu, bazı sonuçlar için yeterli olsa da, yalnızca geçerli tarih ve saatlerin göz ardı edildiğinden emin olmamız gereken durumlar da olabilir. Normal ifade, yalnızca tanımlanmış bir aralıktaki geçerli tarihlerle eşleşecek şekilde genişletilebilir.
Seri Halinde Çoklu Filtreler
Belirli bir test senaryosu sonucu için birçok farklı karşılaştırma kriteri olduğunda, sonucu kelimenin tam anlamıyla ayrı parçalara ayırmak ve ardından her bir parçayı ayrı ayrı karşılaştırmak genellikle daha iyidir. Bu, filtrelerin kendilerini daha basit tutar ve tüm karşılaştırma sürecinin anlaşılmasını, uygulanmasını ve sürdürülmesini kolaylaştırır.
Örneğin, test tarafından oluşturulan veya değiştirilen dosyaları gösteren bazı test çıktıları olan, gösterilen dizin listesini düşünün. Bunu beklenen sonuçla (manuel olarak doğrulanan ilk test çalıştırması tarafından oluşturulan dizin listesi) karşılaştırmak istiyoruz. Bunu yapmanın amacı, tüm aynı dosyaların mevcut olduğundan ve aynı boyutta olduğundan ve fazladan dosya görünmediğinden emin olmaktır.
İki dizin listesi farklı dosyalar içerebilir veya farklı boyutlara sahip olabilir, ancak bizim kontrol ettiğimiz şey bu. Bununla birlikte, iki liste farklı bir sırada olabilir ve tarihler ve saatler farklı olacaktır, bu nedenle bu farklılıklarla başa çıkmak zorunda kalacağız, aksi takdirde onları görmezden geleceğiz.
Farklı bir disk kullanılabilir, dolayısıyla birim etiketi, seri numarası ve sürücü adı tamamen farklı olabilir. Dosyalardaki diğer kayıtlar (dizin adları, dosya sayıları vb.) yaptığımız kontrolle ilgili değildir ve bu nedenle güvenle göz ardı edilebilir.
Tabii ki, ilk etapta daha uygun bir sonuç (yani sadece boyutlarıyla birlikte dosyaların bir listesi) oluşturmak daha iyi olacaktır. Ancak, uğraşmanız gereken birçok sonuç için geçerli olacağından, değiştiremeyeceğimiz bir sonucun örneği olarak bu dizin listesini kullanıyoruz.
Yüz filtreleri
Yüksek geçiren filtre
Fotoğrafta filtre Nedir
Elektronik filtreler
filtre (fotoğrafçılık)
Instagram filtre
Polarize filtre nedir
Fotoğrafta filtreler
Niyetimiz yalnızca dosya adları ve boyutlarının listesini karşılaştırmak olduğundan, diğer tüm bilgileri göz ardı edebiliriz. Bu, aşağıdaki filtre ile yapılabilir.
Bu filtre, / karakterleriyle sınırlandırılmış normal ifadeyle eşleşen tüm satırları (Perl print deyimi aracılığıyla) çıkarır. A\d normal ifadesindeki ilk birkaç karakter, yalnızca bir rakamla başlayan satırlarla eşleşir. Bu, yalnızca bir tarihle başlayan, yani dosya adlarını ve dizin adlarını içeren satırları seçer.
Normal ifadenin sonraki birkaç karakteri [“<]*$, yalnızca < karakteri olmayan satırlarla eşleşir. Bu, < karakteri içeren dizin adı kayıtları olduğundan yalnızca dosya adı kayıtlarını seçer.
Tarihler ve saatlerle değil, yalnızca dosya adları ve boyutlarıyla ilgileniyoruz, bu nedenle bir sonraki filtre bu tarih ve saatleri değiştirme veya silme yoluyla maskelemelidir. Silme işlemini seçtik.
Bu filtre, tarih ve saati her kayıttan hiçbir şeyle değiştirerek siler. İlk iki eğik çizgi arasındaki normal ifade, tarih ve saat ile boşluk karakterlerini dosya boyutuna kadar eşleştirir. İfadenin ilk kısmı, A . * : , kaydın başlangıcından iki noktaya kadar olan tüm karakterlerle eşleşir.
İfadenin bir sonraki kısmı, . . *, iki noktadan hemen sonraki ilk iki karakterle (zamanın dakika kısmı olacaktır) ve ardından herhangi bir sayıda boşlukla eşleşir. Bunun, ilgilenmediğimiz her şeyi, yani tarihler, saatler ve dosya boyutlarından önceki boşlukları silme etkisi vardır.
Dosya adları farklı bir sırada görünebilirse, karşılaştırmadan önce iki listeyi sıralamamız gerekir. Ayrıca dosya adının ardından boyutun olması daha iyi olur.
Bu filtre, bir ikame komutu kullanarak dosya adı ve boyut alanlarını değiştirir. Normal ifadenin ilk kısmı ( [ ” ]*), boyut alanı olacak herhangi bir sayıda boşluk olmayanla eşleşir. Bu ifadeyi parantez içine almak, daha sonra ($1 olarak) atıfta bulunulabileceği anlamına gelir.
Normal ifadedeki boşluk karakteri, boyut ve ad alanlarını ayıran boşluk karakteriyle eşleşir. İfadenin son kısmı ( . * ), kaydın geri kalanıyla (dosya adı olacak) eşleşir. Yine, parantezler, dosya adına daha sonra başvurulabileceği anlamına gelir.
Eğik çizgiden sonra, $2 $1, dosya adı ve boyut alanlarına ters sırada atıfta bulunur ve böylece konumlarını değiştirir. Üçüncü filtremiz gösterilen çıktıyı üretir. Bu dosya daha sonra gösterilen çıktıyı üretmek için sıralanır.
Şimdi iki filtrelenmiş dosya listesinin karşılaştırılması (basit bir karşılaştırıcı kullanarak), eksik ve fazla dosyaların yanı sıra farklı boyuttaki dosyaları vurgulayacaktır. Bu sadece istediğimiz şeydi. Bir dizi filtre kullanarak, yaptığımız kontrolle ilgili olmayan veya karşılaştırılamayan parçaları kaldırmak için test senaryosu sonucunu düzenledik.
Aslında, bu karşılaştırma sürecini bir dizi filtre olarak tanımlamış olsak da, bunu bir veya iki filtre olarak uygulamayı seçmemiz daha olasıdır. Tüm düzenlemeler (çıkarmalar, silmeler ve ikameler) tek bir filtre ile kolayca gerçekleştirilebilir. Perl’de uygulanmış olsaydı, o zaman bizim için sıralamayı da üstlenebilirdi, ancak bir metin editörü tarafından uygulanmışsa, sıralamayı gerçekleştirmek için ikinci bir filtre kullanmak daha kolay olurdu.