Tekil Mesaj gösterimi
Alt 18 Aralık 2012, 23:06   #2
Çevrimdışı
saywhat
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: !basvuru kayıt tcl yardım lütfen




bir süredir tcl dökümanları toplamaya oluşturmaya + çevirmeye çalışıyorum. aşağıdaki örneklemeler faydalı olacaktır.

.dosya prosedürleri: [yazma,silme,okutma,degisme,vs..)

dosya kontrolü

kullanim:
dosyakontrol dosyaismi
dosyakontrol <dosyaismi>

return
1 dosya varsa,aksi halde 0
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyakontrol {dosyaismi} { # dosyanin olup olmadigina bakiyoruz if [dosya exists $dosyaismi] then { # dosya var. return 1 } else { # dosya yok. return "0" } }

örnek:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
if {[dosyakontrol dosyaismi.txt]} then { set text "dosya var" } else { set text "dosya bulunamadi" } set result [dosyakontrol dosyaismi.txt] ; # 0 yada 1 olarak $result ta donecektir.

-----------------------------------------------------------------------
okutma:

dosyadanoku dosyaismi ?satir?
dosyadanoku <dosyaismi> [satir]

Return:
hatada 0 aksi <else> halde postala
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyadanoku {dosyaismi {satir 0}} { # dosyanin olup olmadigi ve okunabilirligi kontrol ediliyor. if {[dosya exists $dosyaismi] && [dosya readable $dosyaismi]} then { # okuma icin dosyayi aciyoruz set dosya [open $dosyaismi r] if {$satir!=1} then { # okuma islemi set oku [read -nonewline $dosya] } else { # satir oku set oku [get $dosya] } # postala ve dön close $dosya return $oku } # okunabilir degilse return 0 }

dosya okumayi tamamlar yada sadece ilk satirindan okur (satir 1 oldugunda*)

örnek:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyadanoku {dosyaismi satirno {yontem 1}} { # okumaya satir 0'dan basla satir 1 satir 2...satir 90,91...devam et. proc Eofileokut {dosya satirno} { set okumano 0 # eof (end of file) yani dosya sonuna gelinceye dek satirlari oku while ![eof $dosya] { set satir [gets $dosya] if {$satirno==$okumano} {return $satir} incr okumano } # hataliysa return 0 } proc tamaminiokuvesirala {dosya satirno} { # tum dosyayi oku set okuyoz [read -nonewline $dosya] # listele set liste [split $okuyoz \n] # sonuc olarak ciktisi return [lindex $liste $satirno] } # dosyayi ve yaptirmak istediklerimizi (parametreleri) kontrol et, hata varsa don geri. if {![dosya exist $dosyaismi] || ![dosya readable $dosyaismi] || ![string is digit $satirno]} {return 0} # dosyayi ac set dosya [open $dosyaismi r] if {$yontem!=1} { # ilk proseduru uygulat set satir [Eofileokut $dosya $satirno] } { # ikinci (tanimladigimiz) proseduru uygula (yani sirayla oku.adami ugrastirma aksam aksam..) set satir [tamaminiokuvesirala $dosya $satirno] } close $dosya return $satir }

uygulamalar:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
set text [dosyadanoku dosyaismi.txt]; foreach satir [split $text \n] { puthelp "privmsg #kanal :$satir" } set ilksatir [dosyadanoku dosyaismi.txt 1]; # dosyaismi.txt teki ilk satiri oku set ilksatir [dosyadansatiroku "eggdrop.conf" 0 0]; # eggdrop.conf taki ilk satirdan okutma oku/siralat yontemiyle. set satir [dosyadansatiroku "eggdrop.conf" 50 0]; # eggdrop.conf satir 51 e kadar gets/eof yontemiyle daha yavasca oku (hafiza kullanimi icin daha iyi) .


-----------------------------------------------------------------------

yazdirma:

dosyabilgiyaz dosyaismi icerik ?otoekleme?
dosyabilgiyaz <dosyaismi> <icerik> [otoekleme]

return 1 # isler tikirindaysa...

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyabilgiyaz {dosyaismi icerik {otoekleme 0} {yenisatir 1}} { # dosya yoksa yada oto ekleme/yazma olmuyorsa olusturma/usteyazma if {![dosya exists $dosyaismi] && $otoekleme!=1} then { # yazma yontemi icin dosyayi aciyoruz set dosya [open $dosyaismi w] } else { # ekleme yontemi icin aciyoruz set dosya [open $dosyaismi a] } # icerigi yazdiriyoruz if $yenisatir {puts $dosya $icerik} {puts -nonewline $dosya $icerik} # postalama ve yazdirma isleri tikirindaysa return 1 close $dosya return 1 }


dosyaismi - dosya ayarlarini otoekleme 1 ile geri ekler/yonlendirilir daha sonra icerik bu dosyada tutulur.

-----------------------------------------------------------------------

kopyalama ,kaldirma ,silme ,yeniden adlandirma:

kullanim sekli:

dosyailet dosyaismi ?tasi?
dosyailet <dosyaismi> [tasi]

olumluysa return 1 degilse 0

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyailet {dosyaismi {tasi 0}} { if [dosya exists $dosyaismi] { if [dosya exists $dosyaismi.bak] {dosya delete $dosyaismi.bak} if {$tasi==1} { dosya rename $dosyaismi $dosyaismi.bak } { dosya copy $dosyaismi $dosyaismi.bak } return 1 } return 0 }

-----------------------------------------------------------------------

satirlar işlemleri
:
kullanimi:

dosyasatirsil dosyaismi satirindan ?satirina? ?geriyukle?
dosyasatirsil <dosyaismi> <satirindan> [satirina] [geriyukle]

hersey yolundaysa return 1

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyasatirisil {dosyaismi satirindan {satirina -1} {geriyukle 1}} { if {![dosya exist $dosyaismi] || ![dosya readable $dosyaismi]} {return 0} if {![string is digit $satirindan] || ![string is digit $satirina]} {return 0} if {$satirina==-1} {set satirina $satirindan} # dosyayi acalim ve listeden okutalim set dosya [open $dosyaismi r] set liste [split [read -nonewline $dosya] \n] close $dosya # satirlari listeden kaldiralim set liste [lreplace $liste $satirindan $satirina] # olustur [yoksa] geri yukle if {$geriyukle!=0} { # yeniden isimlendirme [zorlayarak yapacagiz cunku eski geri yuklemeler duruyor olabilir) dosya rename -force $dosyaismi $dosyaismi.bak } # dosyanin ustune yazdirip geri koyuyoruz. set dosya [open $dosyaismi w] puts -nonewline $dosya [join $liste \n] close $dosya return 1 }

diger bir ornek: yukardaki alistirmadaki gibi yazdirma okutma proseduruyle .

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc baskasatirsil {dosyaismi satirindan {satirina -1} {geriyukle 1}} { if {![string is digit $satirindan] || ![string is digit $satirina]} {return 0} set yukleme [split [dosyaoku $dosyaismi] \n] if {$yukleme!=0} { set yukleme [lreplace $yukle $satirindan $satirina] if {$geriyukle==1} {dosyageriyukle $dosyaismi 1} # yeni bir satir yada ekleme olmaksizin yuklemeyi yazdirma set sonuc [dosyayazdir $dosyaismi [join $yukleme \n] 0 0] if {$sonuc!=1} { # hataliysa return 0 } # tamamsa return 1 } # olmadiysa return 0 }

dosyadan siralama gozetmeksizin (random) satir okutma:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# dosyadan herhangi bir satiri dondurur (mevcud degilse hata verecektir.) proc satirlar {dosya} { set fs [open $dosya r] set bilgi [read -nonewline $fs] close $fs # simdi bilgilerin depolandigi dosyanin tum icerigini gosterecegiz set bilgi [split $bilgi \n] # burda satirlari listeleyip eggdrop'un "rand" isleviyle yani siralama gozetmeksizin dosya icindeki elemanlari cekecegiz(ve dondurucez)) #return [lindex $bilgi [rand [llength $bilgi]]] # yada tcl'deki "rand" fonksiyonu-isleviyle degisilebilir. return [lindex $bilgi [expr {int(rand()*[llength $bilgi])}]] }

dosyadaki belirli bir satiri baskasiyle degismek-ustune yazma:

!degis
set satir1 [satirdegis "$dosya" 0 0]
putserv "privmsg $chan :satir $satir1 degistirildi."
gibi olacak...

örnek:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
proc dosyasatirdegis {dosyaismi satirno yenitxt {geriyukle 1}} { if {![dosya exist $dosyaismi] || ![dosya readable $dosyaismi]} {return 0} if {![string is digit $satirno]} {return 0} # dosyayi acip listeden okutalim set dosya [open $dosyaismi r] set liste [split [read -nonewline $dosya] \n] close $dosya # listedeki texti degistirelim set liste [lreplace $liste $satirno $satirno $yenitxt] # olustur (yoksa) geri yukle if {$geriyukle!=0} { # dosyayi yeniden isimlendiriyoruz (buna zorluyoruz eski geri yuklemeler hala duruyor olabilir) dosya rename -force $dosyaismi $dosyaismi.bak } # dosyanin üstünden yazdirip geri yuklemeleri koyuyoruz. set dosya [open $dosyaismi w] puts -nonewline $dosya [join $liste \n] close $dosya return 1 }


şimdilik bu kadar.umarım işinize yarar.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklamver bizimmekan