Forum IRC / IRC 1999 / TCL
<< . 1 . 2 . 3 .
Autor Wiadomość
Googie


Posted: 7 Sier 2003 10:53:34


Nie jestem pewien czy skrypt TeKaDy dziala poprawnie, nie chce mi sie go
sprawdzac, ale linia:
set plik [split [read $if] " "]
chyba nie zadziala tak jak on to przewidzial. Przeciez wtedy wszystkie
wyrazy przeczytane z pliku beda w osobnych liniach. Ten skrypt nie usunie 6
linii, a 6 wyraz. Ja sugeruje inne rozwiazanie, a przy okazji dostosuje je
do drugiego pytania:

bind pub - !del del:chan

proc del:chan {nick uhost handle channel arg} {

# Najpierw zmienimy nazwe temu plikowi, aby pozniej zapisac do pierwotnej
# nazwy wlasciwe dane.
file rename -force plik.txt plik.txt.bak
set fd [open plik.txt.bak r]
set fd2 [open plik.txt w]

# Teraz trzeba czytac caly plik, dopoki nie osiagniemy konca.
# Przy okazji bedziemy sprawdzac kazda linie, czy zawiera podany kanal,
# jesli tak, to nie bedziemy jej zapisywac do nowego pliku.
while {![eof $fd]} {
gets $fd data
if {![string match *$arg* $data]} {
puts $fd2 $data
}
}
close $fd
close $fd2
file delete -force plik.txt.bak
}

Gdybys mial jeszcze jakies pytania to pytaj na #tcl, powinienes mnie tam
zlapac, a jak nie to moze kogos innego. Tak sie sklada ze na razie tylko ja
tam po polsku mowie, wiec zacznij moze od pytan po angielsku.

Dariusz Kuliński / TaKeDa


Posted: 8 Sier 2003 21:23:41



Napisalem prosty skrypt, aby to sprawdzic:

[...]

Plik aa zawieral jakies smieci, chodzilo ogolnie o porownanie czasu
wykonywania. Do twojego przykladu dolozylem petle while, poniewaz po
pierwszym usunieciu, nie szukal powtorzen, a podejzewam ze Onex operuje na
logach, czy czyms takim, wiec trzeba wziasc to pod uwage. Wyniki sa
nastepujace:
1482 microseconds per iteration
1131 microseconds per iteration
wiec faktycznie Twoja metoda jest nieco szybsza, przyznaje, chociaz nie jest
to drastyczna roznica. Z drugiej strony uwazam ze moja jest czytelniejsza i
bardziej elastyczna (do potencjalnych przerobek).

Przy większym pliku powinna być większa różnica. BTW: twój przykład nie
zamieniał wszystkich znaków na małe (string tolower) ja to dałem, bo
przypuszczałem, że onex ma w tym pliku tylko listę kanałów (nie napisał
dokładnie po co mu to) a kanały są case insensitive. Jestem pewien, że ta
operacja spowalnia działanie jeszcze bardziej. Nie przypuszczałem też że
będziemy szukać w pliku wszystkich powtórzeń (kod został napisany z myślą o
znalezieniu pierwszej linii).

Co do czytelności, to uważam, że tak samo są czytelne. Twoje rozwiązanie
jest podobne do takich jakie zwykle użyło by się w innych językach
programowania (np. C) Ale TCL ma swoje wewnętrzne polecenia które same w
sobie są szybkie, jeżeli damy tym poleceniom wykonanie za nas większość
czynności, uzyskamy większą prędkość kodu.

Tak czy siak... DGNED. Obydwie metody dzialaja. Przepraszam ze zanegowalem
Twoja metode. Tym sposobem Onex ma wybor :)

Moja metoda nie byla zoptymalizowana do wykrywania kilku linii, dodatkowo
zmianiała wszystkie znaki na małe. Oto kod, który został napisany do
wykonania dokładnie tego samego co Twój:

puts [time {
set in [open aa r]
regsub -all -linestop {.*#.* } [read $in] {} data
close $in

set out [open aa2 w]
puts -nonewline $out $data
close $out
}]

wyniki (porównywałem do kodu zaproponowanego w tym poście, nic w nim nie
zmieniałem, tylko copy&paste):

898238 microseconds per iteration
371732 microseconds per iteration

Przebijesz? ;)

Plik testowy miał 10000 linii o długości 80 znaków wśród nich było 949
linii z jednym lub kilkoma znakami "#"

No i mój kod wygląda bardziej przejżyście. ;PPP

Przepraszam, że zanegowałem Twoją metodę ;)

Googie


Posted: 9 Sier 2003 09:07:36



[cut]


Przebijesz? ;)

Plik testowy miał 10000 linii o długości 80 znaków wśród nich było 949
linii z jednym lub kilkoma znakami "#"

No i mój kod wygląda bardziej przejżyście. ;PPP

Okay. Masz racje :)


Przepraszam, że zanegowałem Twoją metodę ;)
Hrhrhr... Nie wybaczam! :)


<< . 1 . 2 . 3 .
Twoja wypowiedź

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Wyłącz BB code *Co to takiego?


Zanim wyślesz jakąś wiadomość z polskimi znakami, upewnij się czy kodowanie znaków w twojej przeglądarce to ISO-8859-2
» Login  
» Hasło 
            
 

Czas ładowania strony (sek.): 0.116
Powered by miniBB © 2001-2008


Warning: mkdir() [function.mkdir]: No such file or directory in /home/www/fora_usenet/index.php on line 57

Warning: fopen(/home/www/fora_usenet/cache/72/72f939d6bc7232e6b041825652edd08c.html) [function.fopen]: failed to open stream: No such file or directory in /home/www/fora_usenet/index.php on line 60

Warning: fwrite(): supplied argument is not a valid stream resource in /home/www/fora_usenet/index.php on line 61
0.4325
Apteka
Apteka
www.aptekajuventa.p…
Pozycjonowanie
Skuteczne pozycjonowanie stron
www.pierwszemiejsce…
Opisy GG
Unikalne opisy do komunikatorów
www.twojopis.net
Ocean's Thirteen
Ocean's Dany
poszkole.pl/video.p…
tapety krajobrazy
tapety krajobrazy
www.twoje-tapety.co…
kremy | Europa | wikipedia | apartments Florence | Kanada