IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   Eggdrop, NeoStats, BNC (https://www.ircforumlari.net/eggdrop-neostats-bnc/)
-   -   Tcl Satır okutma Yardım (https://www.ircforumlari.net/eggdrop-neostats-bnc/225028-tcl-satir-okutma-yardim.html)

akkaya 22 Haziran 2009 01:22

Tcl Satır okutma Yardım
 
Arkadaşlar aşağıdaki kod bir txt dosyasını ilk cümleden itibaren sırayla okutmaya yarıyor.

buna sadece istediğmiz bir satırı okutacak şekilde veya bir html kod belgesinde ki iki html kodu arasında mevcut olan anlamlı bir kelimeyi okutma işlevini nasıl ayarlayabiliriz. örneğin:
18. satırda mevcut olan <tdalign="center" height="75" colspan="2">
75 değerini okutmak istiyorum. bilgisi olan arkadaşlar yardım ederse çok sevinirim.

Kod:


set oku "dosya.txt"
set kanal "#yardım"
bind pub - !kural pub:kuralmsg
proc pub:kuralmsg { nick host hand chan text} {
global oku kanal
if {[file exists $oku]} {
set kuralfile [open $oku r]
while {![eof $kuralfile]} {
catch {set kuraltext [gets $kuralfile]}
putserv "PRIVMSG $kanal :$kuraltext"
}
catch {close $kuralfile}   
}
}


SaW 22 Haziran 2009 01:56

Cevap: Tcl Satır okutma Yardım
 
Alıntı:

akkaya Nickli Üyeden Alıntı (Mesaj 743207)
Arkadaşlar aşağıdaki kod bir txt dosyasını ilk cümleden itibaren sırayla okutmaya yarıyor.

buna sadece istediğmiz bir satırı okutacak şekilde veya bir html kod belgesinde ki iki html kodu arasında mevcut olan anlamlı bir kelimeyi okutma işlevini nasıl ayarlayabiliriz. örneğin:
18. satırda mevcut olan <tdalign="center" height="75" colspan="2">
75 değerini okutmak istiyorum. bilgisi olan arkadaşlar yardım ederse çok sevinirim.

Bu tarz durumlarda çoğunlukla regexp kullanırız, daha basit ifadeler için ise string match komutunu kullanırız, bazen de her ikisini iç içe kullandığımız da olur. Eğer okutacağımız satır numarası belliyse daha farklı bir yöntem de izlenebilir. Yani hangisi daha çok işe yarayacaksa o esnada o kullanılır. O yüzden genel olarak "şuraya şunu yazarak okutursun" demek olmaz. Somut bir örnek olsa burada şunu kullanabilirsin diyebiliriz. Yapman gereken başka tcl'leri inceleyerek nerede nasıl yapıldığını görmen. Verdiğin örneği ise şu şekilde yaptırabilirsin.

Kod:


set oku "dosya.txt"
set kanal "#yardım"
bind pub - !kural pub:kuralmsg
proc pub:kuralmsg { nick host hand chan text} {
global oku kanal
if {[file exists $oku]} {
set kuralfile [open $oku r]
while {![eof $kuralfile]} {
catch {set kuraltext [gets $kuralfile]}
regexp -- {<tdalign=\"center\".height=\"(.*?)\".colspan=\"2\">} $kuraltext - deger
if {[info exists deger]} {
putserv "PRIVMSG $kanal :$deger"
}
}
catch {close $kuralfile}   
}
}


akkaya 22 Haziran 2009 20:28

Cevap: Tcl Satır okutma Yardım
 
örnek için çok teşekkürler, bu kodu geliştirmek için havadurumu.tcl sini de inceledim fakat bu konu beni iyice aşmaya başladı. aynı dosyadaki ikinci bir kelimeyi daha getireyim dedim fakat hiç bir şekilde olmadı çok acemiyim. irc script ile de uğraştım fakat bu regex işi çok derin bir boyut ki altından kalkamayacağım. irc scriptde örneklerin çok anlatımların fazla olması istediğimi forumda kolaylıkla bulmam beni fazla uğraştırmıyordu..

Alıntı:

set oku "dosya.txt"
set kanal "#bilgi"
bind pub - !kural pub:kuralmsg
proc pub:kuralmsg { nick host hand chan text} {
global oku kanal
if {[file exists $oku]} {
set kuralfile [open $oku r]
while {![eof $kuralfile]} {
catch {set kuraltext [gets $kuralfile]}
regexp -- {<tdalign=\"center\".height=\"(.*?)\".colspan=\"2\ ">} $kuraltext - deger
regexp -- {+.colspan=\"(.*?)\".class=\"thd\">} $kuraltext - dgr2
if {[info exists deger]} {
putserv "PRIVMSG $kanal 1.ölçü:$dger2 2.ölçü:$dgr2"
}
}
catch {close $kuralfile}
}
}

BuCaLI 22 Haziran 2009 20:33

Cevap: Tcl Satır okutma Yardım
 
1.ölçü:$dger2 demişsin fakat $dger2 diye bi şey yok ortada orda hata vermiş ve msg yi yollamamış olabilir.

akkaya 22 Haziran 2009 20:42

Cevap: Tcl Satır okutma Yardım
 
Alıntı:

set oku "dosya.txt"
set kanal "#bilgi"
bind pub - !kural pub:kuralmsg
proc pub:kuralmsg { nick host hand chan text} {
global oku kanal
if {[file exists $oku]} {
set kuralfile [open $oku r]
while {![eof $kuralfile]} {
catch {set kuraltext [gets $kuralfile]}
regexp -- {<tdalign=\"center\".height=\"(.*?)\".colspan=\"2 \ ">} $kuraltext - deger
regexp -- {+.colspan=\"(.*?)\".class=\"thd\">} $kuraltext - dgr2
if {[info exists deger]} {
putserv "PRIVMSG $kanal 1.ölçü:$deger 2.ölçü:$dgr2"
}
}
catch {close $kuralfile}
}
}

pardon bir kaç şey denemiştim de o bölüm öyle kalmış asıl bu koddur çalışmıyor çalışsaydı buna göre kodu devam ettirecektim

BuCaLI 22 Haziran 2009 20:56

Cevap: Tcl Satır okutma Yardım
 
if {[info exists deger]} {
putserv "PRIVMSG $kanal 1.ölçü:$deger 2.ölçü:$dgr2"
}

bölümüne göre $deger değişkenide varken göstermek istiyosun. Acaba aynı dosyada $deger içinde bi satır mevcutmu. yoksa sadece $dgr2 mevcutsa o kısmı komple silip sadece ;

putserv "PRIVMSG $kanal 2.ölçü:$dgr2"

şeklinde kullanarak dene. [info exists deger] gibi bi kullanımında zaten ne işe yaradığını anladığını düşünerek her iki değişken içinde ayrı koşullarla msg yollatabilirsin.

akkaya 22 Haziran 2009 22:35

Cevap: Tcl Satır okutma Yardım
 
ilginiz için teşekkür ederim. 1 satırı güzel okuyor herhangi ikinci değeri okutma da sıkıntı var havadurumu.tcl si üzerinde kafa yorup deneyeyim. nebilimben arkadaşımızın verdiği kod çalışıyor.

SaW 23 Haziran 2009 01:02

Cevap: Tcl Satır okutma Yardım
 
Aslında burada mantık hatası yapıyorsun. Farkındaysan bunu while döngüsü içerisinde almaya çalışıyorsun. Farklı satırlar olduğu için her defasında farklı bir satırı görecektir döngü. O yüzden aynı mesaj içerisinde her ikisini birden veremiyor. Burada yapabileceğin farklı yöntemler var. Mesela kanal mesajını döngü dışına çıkarmak bir çözümdür. ve ya döngü içerisinde iki mesaj verdirebilirsin v.s. v.s.
Alıntı:

akkaya Nickli Üyeden Alıntı (Mesaj 743941)
Kod:

set oku "dosya.txt"
set kanal "#bilgi"
bind pub - !kural pub:kuralmsg
proc pub:kuralmsg { nick host hand chan text} {
global oku kanal
if {[file exists $oku]} {
set kuralfile [open $oku r]
while {![eof $kuralfile]} {
catch {set kuraltext [gets $kuralfile]}
regexp -- {<tdalign=\"center\".height=\"(.*?)\".colspan=\"2  \ ">} $kuraltext - deger
regexp -- {+.colspan=\"(.*?)\".class=\"thd\">} $kuraltext - dgr2
if {[info exists deger] && [info exists dgr2]} {
putserv "PRIVMSG $kanal 1.ölçü:$deger 2.ölçü:$dgr2"
}
}
catch {close $kuralfile}
}
}

Kod:

set oku "dosya.txt"
 set kanal "#bilgi"
 bind pub - !kural pub:kuralmsg
 proc pub:kuralmsg { nick host hand chan text} {
 global oku kanal
 if {[file exists $oku]} {
 set kuralfile [open $oku r]
 while {![eof $kuralfile]} {
 catch {set kuraltext [gets $kuralfile]}
 regexp -- {<tdalign=\"center\".height=\"(.*?)\".colspan=\"2  \ ">} $kuraltext - deger
 regexp -- {+.colspan=\"(.*?)\".class=\"thd\">} $kuraltext - dgr2
 }
putserv "PRIVMSG $kanal 1.ölçü:$deger 2.ölçü:$dgr2"

 }
 catch {close $kuralfile}
 }
 }


örnekler çoğaltılabilir. işine geleni kullanırsın.

akkaya 23 Haziran 2009 18:22

Cevap: Tcl Satır okutma Yardım
 
vermiş olduğunuz örnekle epey bir yol katettim bir yerde takıldım. sanırım bu sorunda çok basit ama bulamadım. Benzer metinlerde sıkıntı var mesla ahmet kelimesini okumak istediğimiz zaman vermiş olunan örnek 183 sayısını da görebiliyor.

<td class="td1">44</td>
<td>ahmet</td>
<td>183</td>

Kod:

regexp -- {<td>(.*?)</td>} $kuraltext - deger
bunu tcl içerisinde yazmam halinde metin içerisinde buna benzerlik gösteren başka bir kelimeyi getiriyor. 1. satırdaki nin sonuna bir bağlantı eklemeliyim ki 2 satıra bağllantı kurabileyim. yani
Kod:

regexp -- {<td.class=\"td1\">44</td>    <td>(.*?)</td>} $kuraltext - deger
iki satırı birleştirebilen bir sihirli kelime lazım bu üstteki boşluğa.

akkaya 01 Temmuz 2009 15:39

Cevap: Tcl Satır okutma Yardım
 
arkadaşlar varmı bunu yapabilecek


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 11:06.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk