| Forum IRC / IRC 1999 / TCL |
| << . 1 . 2 . 3 . |
| Autor | Wiadomość |
| Googie |
Posted: 7 Sier 2003 10:53:34
|
| 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
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 . |
IRC 1997 (1287/6819)
IRC 1996 (40/70)
IRC 1998 (1616/9432)
IRC 1999 (2192/18464)
IRC 2000 (2115/16374)
IRC 2001 (1921/26742)
IRC 2002 (1440/22336)
IRC 2003 (896/13189)
IRC 2004 (537/7284)
IRC 2005 (116/2483)
IRC 2006 (86/1113)
IRC 2007 (51/340)
IRC 2008 (8/61)