![]() |
|
|
#2 (permalink) |
|
Junior Member
|
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 ?
|
|
|
|
|
|
#3 (permalink) |
|
Administrator
aka aqwzsx |
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
___ 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. |
|
|
|
|
|
#4 (permalink) |
|
Junior Member
|
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]
__________________
Are u sure u wana read this ? Last edited by UniversaliA; 11-06-2004 at 07:10. |
|
|
|
|
|
#5 (permalink) |
|
Administrator
aka aqwzsx |
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. |
|
|
|
|
|
#7 (permalink) |
|
Administrator
aka aqwzsx |
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"
}
Code:
proc readfile {file} {
set text ""
set toread [open $file r]
while {![eof $toread]} {lappend text [gets $toread]}
close $toread
return "$text"
}
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"
}
Code:
set tocompare [readfile FISIER] Code:
proc writefile {file what} {
if {[catch {open $file a} towrite]} {return 0}
puts $towrite "$what"
close $towrite
return "1"
}
Code:
if {[catch {open $file w} towrite]} {return 0}
foreach x "a b c d e" {puts $towrite "$x"}
close $towrite
}
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
}
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. |
|
|
|
|
|
#9 (permalink) |
|
Administrator
aka aqwzsx |
Code:
bind pub n|- !compare docompare
proc docompare {nick uhost hand chan args} {
***
compare [lindex $args 0] [lindex $args 1]
***
}
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. |
|
|
|
|
|
#10 (permalink) |
|
Member
Join Date: Jun 2004
Location: In the NeXuS
Posts: 160
Rep Power: 38 ![]() |
Code:
set what [join [lrange $args 1 end]]
if {[catch {open $file a} wt]} {return 0}
puts $wt "MOTD: $what"
close $wt
adica daca fac alta setare sa o rescrie pe prima Last edited by lsn; 26-11-2004 at 08:46. |
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|