Tekil Mesaj gösterimi
Alt 03 Ağustos 2014, 00:40   #5
Çevrimdışı
saywhat
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: kanal girişleri kayıt/arama




uzun bir aradan sonra ,bu kodu hatırlayıp geçen hafta "onarmaya" başladım... onarmaya dememin nedeni,kodun en mühim sorunu yapılan aramalarda ; misal 5 arama çıktısına ayarladıysanız ,ama aradığınız kişi/kriterin 5'ten fazla girdisi/kaydı var ise, dosyayı hep ilk satırdan EOF ,yani sona doğru okuduğu için ,en eski 5 kaydı gösteriyordu. ki bu durumda 5'ten fazla kaydı olan aramalarda hep aynı 5 çıktıyı veriyordu...

geçen haftaiçi aklıma geldi bi el atayım bakalım bir yolunu bulabilecekmiyim dedimdi, ancak ne denesem bir türlü geriye doğru arama/okutma olmadıydı.

gugıl'da oraya buraya dalmama bir dolu döküman tırmalamama rağmen ,şuradaki gibi -> [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] soruya verilen cevaplarda da belirtildiği gibi ,Tcl kaynak kodları hep ileriye doğru okumak üzerine bunu kısıtlamış.Tcl'nin kaynak kodlarında (ki C ile yazılmıştır Tcl kaynak kodları) oynayıp değişmeyi önerenlere dahi rastladım...

olmadı Tcl destek kanalında sordum bunun bir yolu var mıdır ,dosyayı tersten,yani son satırdan başlayıp ilk satıra doğru ,yeni girdiden eskiye doğru okumanın diye,yine cevap alamadım,cevap diye önerilen/ler de bir işe yaramadıydı...

aklıma okutulan satırlardaki tarih saat girdilerini regexp yada scan ile yakalatıp,birbirleriyle eşleştirip, lsort -decreasing yani terse doğru sıralatmayla yapabilirmiyim acaba diye tırmalayıp durdum ki ...cık oda olmadıydı...

taki dün geceye kadar,,, tcllib paketlerinin dökümanları arasında dolaşırken aradığımı buluverdim ,,,sonunda....


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


bu kanal içi girdileri/user kayıtları için :

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
setudef flag userec package require struct::list bind join - * rname:join bind pub nm|oa !ara user:search proc rname:join {nick uhost hand chan} { set userecfile "scripts/[string range $chan 1 end]-users.txt" set ::rnick $nick ;set ::rhost $uhost ;set ::rchan $chan ;set ::userecfile $userecfile if {![channel get $chan userec]} { return 0 } if {![string match -nocase $::botnick $nick] && [onchan $nick $chan]} { putquick "whois $nick $nick" bind raw - 311 rname:check } return 0 } proc rname:check {from key text} { set rname [join [string map -nocase {: ""} [lrange [split $text] 5 end]]] set nick $::rnick ;set uhost $::rhost ;set chan $::rchan ;set userecfile $::userecfile set fp [open $userecfile a+] set stamp [clock format [clock seconds] -format "\002Tarih:\002\00312 %d.%B.%Y %A\003 - \002Saat:\002\00312 %H:%M:%S\003" -locale tr_TR] set host [lindex [split $uhost @] 1]; set ident [lindex [split $uhost @] 0] set data "\00300,04JOIN\003 \00312$stamp\003 | \002Nick:\002 \00311$nick\003 | \002Ident:\002 \00311$ident\003 \ | \002Host:\002 \00311$host\003 | \002Realname:\002 \00311$rname\003 | \002Kanal:\002 \00309$chan\003" puts $fp "$data" close $fp catch {unbind raw - 311 rname:check} return 0 } proc user:search {nick uhost hand chan text} { if {![channel get $chan userec]} { return 0;} if {[llength $text] eq "0"} { puthelp "notice $nick :Kullanımı:\002 $::lastbind <aranacak>\002"; return 0;} set userecfile "scripts/[string range $chan 1 end]-users.txt" set text *[string map {" " *} $text]* putserv "notice $nick :\002$text\002 aranıyor..." set i 0 set fp [open $userecfile r] set lines [split [read -nonewline $fp] "\n"] foreach line [struct::list reverse $lines] { if {[string match -nocase $text $line]} { if {$i == 5} break puthelp "notice $nick :$line" incr i } } close $fp if {$i} { putquick "notice $nick :gösterilen arama sonucu : \002$i \002 [expr {$i == 1?"":"adettir."}]..." } else { putserv "notice $nick :\002aramayla eşleşen kayıt bulunamadı...\002" return 0 } } putlog "Ok..."

bu ise sunucu girişlerini kaydedip ,arama yapılabilmesi için:
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
setudef flag userconnect package require struct::list bind raw - NOTICE rname_connect bind pub nm|oa !ara search_user proc rname_connect {from key text} { if {[string match -nocase *!*@* $from]} { return 0 } if {[regexp -nocase -- {Client connecting on port (\d+): (.*) \(([^@]+)@(\S+)\) \[(.*)\]} $text -> port nick ident host rname] && \ ![string match -nocase $::botnick $nick]} { set userecfile "scripts/connecting-users.txt" set fp [open $userecfile a+] set stamp [clock format [clock seconds] -format "\002Tarih:\002\00312 %d.%B.%Y %A\003 - \002Saat:\002\00312 %H:%M:%S\003" -locale tr_TR] set data "\00300,04Connected\003 \00312$stamp\003 | \002Nick:\002 \00311$nick\003 | \002Ident:\002 \00311$ident\003 \ | \002Host:\002 \00311$host\003 | \002Realname:\002 \00311$rname\003 | \002Port:\002 \00309$port\003" puts $fp "$data" close $fp } return 0 } proc search_user {nick uhost hand chan text} { if {![channel get $chan userconnect]} { return 0 } if {[llength $text] eq "0"} { puthelp "notice $nick :Kullanımı:\002 $::lastbind <aranacak>\002"; return 0;} set userecfile "scripts/connecting-users.txt" set text *[string map {" " *} $text]* putserv "notice $nick :\002$text\002 aranıyor..." set i 0 set fp [open $userecfile r] set lines [split [read -nonewline $fp] "\n"] foreach line [struct::list reverse $lines] { if {[string match -nocase $text $line]} { if {$i == 5} break puthelp "notice $nick :$line" incr i } } close $fp if {$i} { putquick "notice $nick :gösterilen arama sonucu : \002$i \002 [expr {$i == 1?"":"adettir."}]..." } else { putserv "notice $nick :\002aramayla eşleşen kayıt bulunamadı...\002" return 0 } } putlog "Ok..."

her ikisi içinde tcllib struct paketi gereklidir.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları tatlim sohbet Mobil Chat