botlending forum  

Go Back   botlending forum > Eggdrop & TCL > Tcl scripting

Tcl scripting Tcl scripting related questions

Reply
 
LinkBack Thread Tools Display Modes
Old 06-06-2004, 17:03   #1 (permalink)
Junior Member
 
Join Date: Jun 2004
Location: Ploiesti
Posts: 56
Rep Power: 0
JohnyWalker is an unknown quantity at this point
Send a message via Yahoo to JohnyWalker
Default sortare

sa presupunem ca exista un fisier cu numere de ex

1
9
6
8
1
6
7
1
7
2
1
6

As vrea un script care sa deschida acest fisier si sa le aranjaze in functie de folosirea lor de exemplu aici are iesii asa : 1 6 7 ... etc


thx
JohnyWalker is offline   Reply With Quote
Old 07-06-2004, 10:24   #2 (permalink)
Junior Member
 
Join Date: Jun 2004
Location: Ploiesti
Posts: 56
Rep Power: 0
JohnyWalker is an unknown quantity at this point
Send a message via Yahoo to JohnyWalker
Default

deci eu am o mare lista de numere ( circa 1000 ) cuprinse intre 1 si 100. Si botul vreau sa mi le soreze in functie de folosirea lor. De exemplu 10 e folosit de cele mai multe ori ( de 50 sa zicem ).... deci va fi primu. 40 e folosit de 45 de ori deci e al doilea. 37 de 30 de ori deci e al treilea.... Intelegi ce vreau sa zic ?
JohnyWalker is offline   Reply With Quote
Old 08-06-2004, 04:55   #3 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 827
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

presupun ca cineva va gasi o solutie mai eleganta, in acest caz si eu si Johny o sa fi recunoscatori daca o sa post-ati in forum.

Code:
 
#deschizi fishier-ul cu cifre, citesti toate cifrele tale si faci o lista din ele, variabila "tocompare"
#eu am luat deja o lista gata 
 
set tocompare "a b c a a c a b b" 
 
#eliberam variabilele daca sunt folosite
 
catch {unset compare}
catch {unset number}
 
#insasi procesul
 
foreach x $tocompare {if {![info exists number($x)]} {set number($x) 0} else {incr number($x)}}
foreach x [array names number *] {set compare($number($x),$x) $x}
 
#deschizi un alt fisier, variabila "file", si acolo scriem rezultatul
foreach x [lsort -decreasing [array names compare *]] {puts $file "[lindex [split $x ,] 0] times for $compare($x)"}
 
#nu uiti sa inchizi fishierul
 
#eliberam variabilele sa nu ocupe memorie in van
unset compare
unset number
unset tocompare
deci is trei randuri efectiv, mai mult ocupa spatiu sa comentezi

___

proc, catch, set, unset, info, return, array, slort, puts, lindex, split - comenzi Tcl (vezi http://tcl.tk/man/)

Last edited by UniversaliA; 11-06-2004 at 07:06.
UniversaliA is offline   Reply With Quote
Old 08-06-2004, 10:06   #4 (permalink)
Junior Member
 
Join Date: Jun 2004
Location: Ploiesti
Posts: 56
Rep Power: 0
JohnyWalker is an unknown quantity at this point
Send a message via Yahoo to JohnyWalker
Default

am observat ca ma lasi si pe mine sa gandesc putin nu ?

pentru file e corect ?

Code:
set file [open "rezultat.txt" w]

Si pt tocompare e corect ?
Code:
set tocompare [open numere.txt]
ceva de genu asta ???
__________________
Are u sure u wana read this ?

Last edited by UniversaliA; 11-06-2004 at 07:10.
JohnyWalker is offline   Reply With Quote
Old 08-06-2004, 10:38   #5 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 827
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

deci ca sa te las sa te mai gandesti, citesti http://mini.net/tcl/2777, explicatiile la comenda file le iai de pe http://tcl.tk/man/tcl8.5/TclCmd/file.htm

dupa asta intrebi ce nu ai inteles iarasi aici, ok ?

Last edited by UniversaliA; 11-06-2004 at 07:07.
UniversaliA is offline   Reply With Quote
Old 09-06-2004, 21:33   #6 (permalink)
Junior Member
 
Join Date: Jun 2004
Location: Ploiesti
Posts: 56
Rep Power: 0
JohnyWalker is an unknown quantity at this point
Send a message via Yahoo to JohnyWalker
Default

Code:
 proc readfile filename {
    set fp [open $filename]
    set res [read $fp [file size $filename]]
    close $fp
    set res
 }

Asta este exemplul pentru a citi un fisier nu ?
__________________
Are u sure u wana read this ?
JohnyWalker is offline   Reply With Quote
Old 11-06-2004, 09:24   #7 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 827
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

1. O modalitate de a citi un file e comanda source (http://tcl.tk/man/tcl8.5/TclCmd/source.htm). Presupun ca deja o cunosteti, cu ea adaugati script-ele tcl la eggdrop. Particuliaritatea acestei comenzi consta in faptul ca totul ce va fi in file, va fi evaluat ca Tcl cod. Deci pentru acest caz, nu va fi utila.

2. Alta modalitate de a citi un file e comanda open (http://tcl.tk/man/tcl8.5/TclCmd/open.htm).

Code:
 
proc readfile {file} { 
set toread [open $file r]
set text [split [read -nonewline $toread] "\n"]
close $toread
 
return "$text"
}
sau
Code:
 
proc readfile {file} { 
 
set text ""
set toread [open $file r]
while {![eof $toread]} {lappend text [gets $toread]}
close $toread
 
return "$text"
}
pentru nu a primi eroare in caz daca fisierul nu este, sau botul nu il poate citi, adaugam o linie in plus

Code:
 
proc readfile {file} { 
 
set text ""
if {[catch {open $file r} toread]} {return 0}
while {![eof $toread]} {lappend text [gets $toread]}
close $toread
 
return "$text"
}
deci pentru a citi fisierul

Code:
 set tocompare [readfile FISIER]
3. pentru a scrie in un fisier

Code:
 
proc writefile {file what} { 
 
if {[catch {open $file a} towrite]} {return 0}
puts $towrite "$what"
close $towrite
 
return "1"
}
sau
Code:
 
 
if {[catch {open $file w} towrite]} {return 0}
 
foreach x "a b c d e" {puts $towrite "$x"}
 
close $towrite
}
deci pentru a scrie in fisier

Code:
 
 
if {[catch {open $file w} towrite]} {return 0}
 
foreach x [lsort -decreasing [array names compare *]] {puts $towrite "[lindex [split $x ,] 0] times for $compare($x)"}
 
close $towrite
}
5. deci intregul script ar arata cam asa

Code:
#script sortare pentru JohnWlaker
#exemplu utilizare: compare cifre.txt rezultat.txt
#bind sper ca puteti adauga singuri
 
proc readfile {file} { 
 
set text ""
if {[catch {open $file r} toread]} {return 0}
while {![eof $toread]} {lappend text [gets $toread]}
close $toread
 
return "$text"
}
proc compare {what where} {
 
set tocompare [readfile $what]
 
if {$tocompare==0} {return 0}
foreach x $tocompare {if {![info exists number($x)]} {set number($x) 1} else {incr number($x)}}
foreach x [array names number *] {set compare($number($x),$x) $x}
 
if {[catch {open $where w} towrite]} {return 0}
 
	foreach x [lsort -decreasing [array names compare *]] {puts $towrite "[lindex [split $x ,] 0] times for $compare($x)"}
	 close $towrite
}
 
return "succeded"
}
___

proc, catch, set, open, close, split, read, return, lappend, gets, eof, puts, lsort, array, lindex, info - comenzi Tcl (vezi http://tcl.tk/man/)

Last edited by UniversaliA; 11-06-2004 at 10:44.
UniversaliA is offline   Reply With Quote
Old 11-06-2004, 10:06   #8 (permalink)
Junior Member
 
Join Date: Jun 2004
Location: Ploiesti
Posts: 56
Rep Power: 0
JohnyWalker is an unknown quantity at this point
Send a message via Yahoo to JohnyWalker
Default

deci stai putin ... acolo u mi-ai dat tot scriptu nu ?
#exemplu utilizare: compare cifre.txt rezultat.txt

compare ce este ?
__________________
Are u sure u wana read this ?
JohnyWalker is offline   Reply With Quote
Old 11-06-2004, 10:23   #9 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 827
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default exemplu de aplicare

Code:
bind pub n|- !compare docompare
 
proc docompare {nick uhost hand chan args} {
 
***
compare [lindex $args 0] [lindex $args 1]
 
***
 
}
Respectiv comanda va fi: !compare cifre.txt lala.txt

in loc de *** puneti autorizare/verificare/output etc. etc.
___

bind - comanda interna eggdrop (vezi doc/tcl-commands.doc)
lindex, proc - comenzi Tcl (vezi http://tcl.tk/man/)

Last edited by UniversaliA; 11-06-2004 at 11:01.
UniversaliA is offline   Reply With Quote
Old 25-11-2004, 12:47   #10 (permalink)
lsn
Member
 
lsn's Avatar
 
Join Date: Jun 2004
Location: In the NeXuS
Posts: 160
Rep Power: 38
lsn will become famous soon enough
Exclamation

Code:
set what [join [lrange $args 1 end]]
if {[catch {open $file a} wt]} {return 0}
puts $wt "MOTD: $what"
close $wt
cum il fac, ca daca vreau sa sa scrie peste MOTD: $what

adica daca fac alta setare sa o rescrie pe prima

Last edited by lsn; 26-11-2004 at 08:46.
lsn is offline   Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT +3. The time now is 07:38.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.