PayPal'a üye olun ve kredi kartı ödemelerini kabul etmeye anında başlayın.
 

Cgi-Perl: Bir dosyanın içerisinde belli bir metni arama

Perl-Cgi Cgi-Perl: Bir dosyanın içerisinde belli bir metni arama Programlama Dilleri hakkında bilgi paylaş; Bir dosyanın içerisinde belli bir metni arama Bu bölümde bir dosyanın içerisinde belli bir ...
Cevapla
 
Seçenekler
  #1  
Arama 13-03-2008, 01:55
W-S - ait Kullanıcı Resmi (Avatar)
W-S W-S forumda değil

Üyelik Tarihi: 23/08/07
Mesajlar: 1.530
 
     WS-Ticareti: (8)
Blog Yazıları: 7
Teşekkürleri: 844
142 Msg. 276 Tşkr.
Rep Gücü: 100 W-S isimli üye Tecrübe puanını kapatmıştır.

Cgi-Perl: Bir dosyanın içerisinde belli bir metni arama

Bir dosyanın içerisinde belli bir metni arama
Bu bölümde bir dosyanın içerisinde belli bir metni nasıl aratabileceğimizi anlatacağım. Eğer bütün sitede arama yaptırmak istiyorsanız bunu kendiniz yapmanızı tavsiye etmem. Bunun için ve gibi hazır site indexleme araçlarını kullanabilirsiniz. (SWISH'i tavsiye ederim)

Dosyada arama yaptırmanın değişik yolları vardır. Eğer bir tek dosyada arama yaptıracaksanız, bir döngü ile dosyadaki bütün kayıtları teker teker okutup aradığınız verinin o kayıtta geçip geçmediğini kontrol edebilir, ya da Perl'ün grep() fonksiyonunu kullanarak dosyanın tamamını bir seferde tarayabilirsiniz. Birinci yolu geçen bölümde öğrendiğimiz bilgilerle yapabilirsiniz. Bu bölümde ikinci yol olan grep() fonksiyonunu kullanarak bunu nasıl yapabileceğinizi anlatacağım.
grep() fonksiyonunun kullanımı aşağıdaki gibidir.
  • @sonuclar = grep(/$arananmetin/,@liste);
Sanırım bir örnek verirsek daha iyi anlaşılır.
  • #!/usr/bin/perl
    @liste = ("sinan","koray","baris","orhan");
    $arananmetin = "an";
    @sonuclar = grep(/$arananmetin/,@liste);
    foreach $i (@sonuclar) { print "$i\n"; }
Bu programın çıktısı aşağıdaki gibi olur.
  • sinan
    orhan
Şimdi biraz daha gelişmiş bir örnek verelim. Aşağıdaki gibi, öğrencilerin okul numarası, isim ve yaş bilgilerinin kaydedildiği "ogrenci.txt" isimli bir veritabanı dosyamız olsun.
  • 1|768|Hasan Şahin|15
    2|515|Mustafa Öztürk|16
    3|663|İlhan Yıldırım|16
    4|697|Fikret Yılmaz|15
    5|716|Haluk Çiçek|15
Şimdi de bu veritabanında arama yaptırmak için bir script yazalım.
  • #!/usr/bin/perl
    $veridosyasi = "ogrenci.txt";
    read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
    @ciftler = split(/&/, $tampon);

    foreach $cift (@ciftler) {
    ($alanadi, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $deger =~ s/~!/ ~!/g;
    $FORM{$alanadi} = $deger;
    }

    $arananmetin = $FORM{'isim'};

    open(DOSYA,$veridosyasi);
    @bilgiler = <DOSYA>;
    close(DOSYA);
    print "Content-type:text/html\n\n";
    print "<html><head><title>Arama Sonuçları</title></head>\n";
    print "<body><h3>Arama Sonuçları</h3>\n";

    $bulunansayisi = 0;

    @sonuclar = grep(/$arananmetin/,@bilgiler);

    if ($#sonuclar >= 0) {
    foreach $i (@sonuclar) {
    chomp($i);
    ($kayitno,$okulno,$adsoyad,$yas) = split(/\|/,$i);
    print "<b>$adsoyad</b> Okul No: $okulno Yaş: $yas<br>\n";
    $bulunansayisi++;
    }
    print "<br><b>$bulunansayisi</b> kayıt bulundu.<p>\n";
    }
    else {
    print "Kayıt Bulunamadı.<p>\n";
    }

    print "</body></html>\n";
Bu programı "ogrenci1.cgi" adıyla kaydedin. Şimdi sıra bu scripti çağıracak formu hazırlamaya geldi.
  • <form action="http://www.sinanilyas.com/cgi-bin/ornek/ogrenci1.cgi">
    Aradığınız kişinin ismini girin <input type="Text" name="isim">
    </form>

Not: $#sonuclar @sonuclar dizisinin eleman sayısının bir eksiğini verir.
Formumuzdaki kutucuğa "Hasan" (tırnak koymadan) yazarsanız script size "Hasan Şahin" isimli öğrenciye ait bilgileri verir. Fakat, script kayıtları alan ayırımı yapmadan taradığı için isim yerine örneğin "15" (tırnaksız) yazarsak bize 15 yaşındaki ve okul numarasında 15 geçen öğrencilere ait bilgileri verir. Bunu hatayı gidermek için scriptimizi aşağıdaki şekilde değiştirmemiz gerekir.
  • #!/usr/bin/perl
    $veridosyasi = "ogrenci.txt";
    read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
    @ciftler = split(/&/, $tampon);

    foreach $cift (@ciftler) {
    ($alanadi, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $deger =~ s/~!/ ~!/g;
    $FORM{$alanadi} = $deger;
    }

    $arananmetin = $FORM{'isim'};

    open(DOSYA,$veridosyasi);
    @bilgiler = <DOSYA>;
    close(DOSYA);
    print "Content-type:text/html\n\n";
    print "<html><head><title>Arama Sonuçları</title></head>\n";
    print "<body><h3>Arama Sonuçları</h3>\n";

    $bulunansayisi = 0;

    @sonuclar = grep(/$arananmetin/,@bilgiler);

    if ($#sonuclar >= 0) {
    foreach $i (@sonuclar) {
    chomp($i);
    ($kayitno,$okulno,$adsoyad,$yas) = split(/\|/,$i);
    if ($adsoyad =~ $arananmetin) {
    print "<b>$adsoyad</b> Okul No: $okulno Yaş: $yas<br>\n";
    $bulunansayisi++;
    }
    }
    }

    if ($bulunansayisi == 0) {
    print "Kayıt Bulunamadı.<p>\n";
    }
    else {
    print "<br><b>$bulunansayisi</b> kayıt bulundu.<p>\n";
    }

    print "</body></html>\n";

Not: if ($adsoyad =~ $arananmetin) satırı $arananmetin değişkenine atanan metnin, $adsoyad değişkenine atanan metnin içerisinde geçip geçmediğini bulmak için kullanılmıştır. Bu örnekte $bulunansayisi isimli değişkenin değeri sadece aranan metin "isim" alanında bulunduğu zaman arttırılır. Eğer aranan metin "isim" alanında değil de örneğin "yaş" alanında bulunursa kayıt ekrana yazdırılmaz ve $bulunansayisi değişkeninin değeri arttırılmaz. Scriptin sonunda $bulunansayisi değişkeninin değeri kontrol edilir ve eğer 0'sa "Kayıt bulunamadı" mesajı yazdırılır. Sinanilyas.com dan alıntıdır.
__________________
~ ~
"Alıntı yaptığınızda webmastersitesi.com'a linkleyiniz!"
Alıntı ile Cevapla
  #2  
Arama 10-10-2008, 12:55

Üyelik Tarihi: 09/10/08
Mesajlar: 1
 
     WS-Ticareti: (0)
Teşekkürleri: 0
0 Msg. 0 Tşkr.
Rep Gücü: 0 mc_legal deneyimleri belirsiz.
windowsta pc üzerinde nasıl yapıcaz. denemelerim olumsuz oldu. bi tane home.html dosyası actım. onun üzerinde denedim. enterlayınca direk ogrenci1.cgi icinde ki kodalara geciyo. bi cözüm bulamadım yardım edebilir misiniz?

veya free linux host biliyormusunuz 10 mb falan?

Konu mc_legal tarafından (10-10-2008 Saat 04:01 ) değiştirilmiştir..
Alıntı ile Cevapla
Cevapla


Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
Yapmanız gereken tek şey, Rar lı dosyanın tam adını google de aratmak.. kadınca Program kullanımı & tanıtım 0 24-12-2007 11:19
OSD (On Screen Display) Metni Yazdırma Celebrian Delphi 0 24-12-2007 01:59
Dosyanın ne zaman eklendiğini gösteren kod! egitimbilgisi Asp kodları 0 26-11-2007 05:14
Metni terse Cevirmek C rhythm C, c++, c# 0 27-10-2007 03:04
Piyasaya son 15 gün içerisinde çıkan ya da önümüzdeki 15 gün içerisinde piyasada olac kadınca Cep telefonu 0 12-09-2007 12:19

Siteye link vermek için alttaki kodu sitenize ekleyin
Ya da kodu Ctrl+C ile kopyalayın
Örnek görünüm: Webmaster Sitesi

Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum iPhone