🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
25 messages
25 total messages Started by Grzegorz Kochan Mon, 03 Sep 2001 11:14
ile wierszy?
#2075
Author: Grzegorz Kochan
Date: Mon, 03 Sep 2001 11:14
7 lines
973 bytes
jak sprawdzic ile jest wierszy w pliku tekstowym?

-- 
Pozdrowienia             
 Grzegorz Kochan  gkochan@post.pl  GG: 21844
 http://www.kolej.pl/serwis
---------------------------------------------
Re: ile wierszy?
#2076
Author: S4A
Date: Mon, 03 Sep 2001 11:34
5 lines
1030 bytes
echo count(file("plik"));

-- S4A soft4all<at>polbiznes.pl
> konto@mail 50/rok
> http://www.inter-media.com.pl/
Re: ile wierszy?
#2082
Author: Metempsychoza
Date: Mon, 03 Sep 2001 12:20
14 lines
1324 bytes
Uzytkownik "Grzegorz Kochan" <gkochan@post.pl> napisal w wiadomosci
news:u6p6ptkrq90v49a46ppkjaks0m3obku8q2@4ax.com...
jak sprawdzic ile jest wierszy w pliku tekstowym?

otwierasz plik, zliczasz wszystkie znaki konca linii:
<?php
$f = fopen ("plik.txt", "r");
while (!feof ($f)) if (fgetc ($f) == "\n") $l++;
fclose ($fd);
echo $l+1; dodajesz  znak konca pliku
?>
--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2077
Author: Grzegorz Kochan
Date: Mon, 03 Sep 2001 12:25
13 lines
1179 bytes
On Mon, 3 Sep 2001 13:34:43 +0200, "S4A"
<nospam.soft4all@polbiznes.pl> wrote:

>echo count(file("plik"));

ale banal :) 
wielkie dzieki!

-- 
Pozdrowienia             
 Grzegorz Kochan  gkochan@post.pl  GG: 21844
 http://www.kolej.pl/serwis
---------------------------------------------
Re: ile wierszy?
#2078
Author: Metempsychoza
Date: Mon, 03 Sep 2001 12:29
9 lines
1218 bytes
Użytkownik "S4A" <nospam.soft4all@polbiznes.pl> napisał w wiadomości
news:9mvpoi$1al$1@news.formus.pl...
> echo count(file("plik"));

... a pozniej bedziesz sie dziwil ze twoj skrypt cholernie wolno dziala i
zzera duzo pamieci...
--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2079
Author: Lech Rychliński
Date: Mon, 03 Sep 2001 13:04
17 lines
1432 bytes
"Metempsychoza" <metempsychoza@wp.pl> wrote in message
news:9mvtj5$lhc$1@news.tpi.pl...
>
> ... a pozniej bedziesz sie dziwil ze twoj skrypt cholernie wolno dziala i
> zzera duzo pamieci...

to moze
system('cat plik | wc -l');

:D

pozdro

--
   Lejzik   >> w3crew.art.pl <> lejzik.w3crew.com.pl <<
 Running through my life right now I don't regret a thing
The things I do just make me laugh and make me wanna drink
Re: ile wierszy?
#2083
Author: slawek-
Date: Mon, 03 Sep 2001 13:05
16 lines
1369 bytes
"Metempsychoza" <metempsychoza@wp.pl> napisał:
> otwierasz plik, zliczasz wszystkie znaki konca linii:
> <?php
> $f = fopen ("plik.txt", "r");
> while (!feof ($f)) if (fgetc ($f) == "\n") $l++;
> fclose ($fd);
> echo $l+1; dodajesz  znak konca pliku
> ?>

To rozwiązanie chyba nie będzie bardziej wydajne niż count(file("plik"));

Oba robią prawie dokładnie to samo. W obu czytany jest cały plik. Różnica
taka, że file i count są zaimplementowane w C w związku z czym z definicji
działają szybciej.

slawek-
Re: ile wierszy?
#2084
Author: Andrzej Kierzkowski
Date: Mon, 03 Sep 2001 18:10
39 lines
2678 bytes
Użytkownik "slawek-" <slawek@irc.pl.NOSPAM> napisał:
> "Metempsychoza" <metempsychoza@wp.pl> napisał:
> > otwierasz plik, zliczasz wszystkie znaki konca linii:
> > <?php
> > $f = fopen ("plik.txt", "r");
> > while (!feof ($f)) if (fgetc ($f) == "\n") $l++;
> > fclose ($fd);
> > echo $l+1; dodajesz  znak konca pliku
> > ?>
>
> To rozwiązanie chyba nie będzie bardziej wydajne niż count(file("plik"));
> Oba robią prawie dokładnie to samo. W obu czytany jest cały plik. Różnica
> taka, że file i count są zaimplementowane w C w związku z czym z definicji
> działają szybciej.

No _absolutnie_ nie masz racji.

count(file(x)) wczyta _cały_ plik do tablicy i zmierzy jej wielkość.
Jak plik będzie ogromy, zajmiesz ogromnie dużo pamięci. Jak wywoła
dużo osób, pamięci pójdzie Ci jeszcze więcej, load do 100, serwer do
nieba, chyba, że ktoś mądry go skonfigurował.

$f = fopen, while czyta plik po wierszu, obciążenie pamięci jest
minimalne, nie ma problemu (ja bym pewnie jednak i tak skorzystał
z "wc -l", bo na pewno żadnego z moich skryptów nie dam uruchomić
na Win, a po co pisać coś, co ktoś napisał lepiej ;)

count(file(x)) to dość prosty "knot", jedne z takich, które prowadzą do
tego, że serwery są obciążone z pięć razy więćej niż mogłyby być,
i trzeba im dokupywać lepsze procesory i więcej pamięci. Wiem co
mówię. Sam kiedyś popełniłem "stado" skryptów, które utrzymywały
load serwera na stałym poziomie ponad 10. Po napisaniu ich od
nowa, ale tak _całkowicie_ od nowa, ten sam serwer przy ich
większej funkcjonalności rzadko wychodzi ponad 0.8.
Po prostu człowiek uczy się całe życie ;)

pozdrowienia
aki
Re: ile wierszy?
#2085
Author: Tomasz Kulawik
Date: Mon, 03 Sep 2001 18:21
32 lines
2524 bytes
Andrzej Kierzkowski napisał(a) w wiadomości: <3b93c5e6@news.vogel.pl>...

>count(file(x)) wczyta _cały_ plik do tablicy i zmierzy jej wielkość.
>Jak plik będzie ogromy, zajmiesz ogromnie dużo pamięci. Jak wywoła
>dużo osób, pamięci pójdzie Ci jeszcze więcej, load do 100, serwer do
>nieba, chyba, że ktoś mądry go skonfigurował.
>
>$f = fopen, while czyta plik po wierszu, obciążenie pamięci jest
>minimalne, nie ma problemu (ja bym pewnie jednak i tak skorzystał
>z "wc -l", bo na pewno żadnego z moich skryptów nie dam uruchomić
>na Win, a po co pisać coś, co ktoś napisał lepiej ;)
>
>count(file(x)) to dość prosty "knot", jedne z takich, które prowadzą do
>tego, że serwery są obciążone z pięć razy więćej niż mogłyby być,
>i trzeba im dokupywać lepsze procesory i więcej pamięci. Wiem co
>mówię. Sam kiedyś popełniłem "stado" skryptów, które utrzymywały
>load serwera na stałym poziomie ponad 10. Po napisaniu ich od
>nowa, ale tak _całkowicie_ od nowa, ten sam serwer przy ich
>większej funkcjonalności rzadko wychodzi ponad 0.8.
>Po prostu człowiek uczy się całe życie ;)


Swieta prawda AKI
Z tablicami to trzeba uwazac o(
Sam ostatnio mialem przygode z "prostym" skryptem ktory niewiedzac czemu
wysylal wlasnie caly serwer w kosmos -)))
W porywach alokowal 1 GB RAMu!!! Absulutny odjazd
Potem wystarczylo zastosowac petle while i od razu serwerek
mogl odpoczac

pozdrawiam i zycze serwerkom aby nie musialy opuszczac naszej planetki :))))
tomek
Re: ile wierszy?
#2086
Author: YoureX
Date: Mon, 03 Sep 2001 18:43
6 lines
1145 bytes
Teraz juz wiem, dlaczego moje statystyki downloadow wysiadaly przy kilku
tysiacach lini w logu :-)

Dzieki

YoureX
Re: ile wierszy?
#2087
Author: slawek-
Date: Mon, 03 Sep 2001 19:52
10 lines
1379 bytes
"Tomasz Kulawik" <tomasz.kulawik@gielda.civ.pl> napisał:
> Sam ostatnio mialem przygode z "prostym" skryptem ktory niewiedzac czemu
> wysylal wlasnie caly serwer w kosmos -)))
> W porywach alokowal 1 GB RAMu!!! Absulutny odjazd

Jak to się stało? Czyżbyś wyrzucił z php.ini poniższą linijkę ;-))

memory_limit = 8M

slawek-
Re: ile wierszy?
#2090
Author: slawek-
Date: Mon, 03 Sep 2001 19:54
9 lines
1370 bytes
"Andrzej Kierzkowski" <aki@helion.pl> napisał:
> count(file(x)) wczyta _cały_ plik do tablicy i zmierzy jej wielkość.
> Jak plik będzie ogromy, zajmiesz ogromnie dużo pamięci. Jak wywoła
> dużo osób, pamięci pójdzie Ci jeszcze więcej, load do 100, serwer do
> nieba, chyba, że ktoś mądry go skonfigurował.

Przyznaję rację.

slawek-
Re: ile wierszy?
#2091
Author: Metempsychoza
Date: Mon, 03 Sep 2001 20:11
9 lines
1402 bytes
> count(file(x)) to dość prosty "knot", jedne z takich, które prowadzą do
> tego, że serwery są obciążone z pięć razy więćej niż mogłyby być,
> i trzeba im dokupywać lepsze procesory i więcej pamięci.

niestety taka jest moda, bo szybciej  (i taniej) jest skoczyc do sklepu po
kostke ramu niz chwilke pomyslec i poprawic skrypt
--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2092
Author: Andrzej Kierzkowski
Date: Mon, 03 Sep 2001 20:32
14 lines
1628 bytes
Użytkownik "Metempsychoza" <metempsychoza@wp.pl>:

> niestety taka jest moda, bo szybciej  (i taniej) jest skoczyc do sklepu
> po kostke ramu niz chwilke pomyslec i poprawic skrypt

Niestety jest to prawda. Pamiętaj, że 128 kosztuje tyle, co godzina
pracy dobrego programisty, albo 2 godziny mniej "wziętego".
Problem się zaczyna, jak już nie ma jak rozbudować serwera,
bo wszystkie "dziury" zapełnione :)
To nie rozbudowa pamięci o kolejne 128 rodzi myśli optymalizacyjne.
To problem, czy całkowicie zmienić serwer (i koszty z tym związane)
powoduje krytyczniejsze podejście do oprogramowania...

aki
Re: ile wierszy?
#2093
Author: Andrzej Kierzkowski
Date: Mon, 03 Sep 2001 20:38
19 lines
1918 bytes
Użytkownik "Andrzej Kierzkowski" <aki@helion.pl> napisał:

> Niestety jest to prawda. Pamiętaj, że 128 kosztuje tyle, co godzina
> pracy dobrego programisty, albo 2 godziny mniej "wziętego".
> Problem się zaczyna, jak już nie ma jak rozbudować serwera,
> bo wszystkie "dziury" zapełnione :)
> To nie rozbudowa pamięci o kolejne 128 rodzi myśli optymalizacyjne.
> To problem, czy całkowicie zmienić serwer (i koszty z tym związane)
> powoduje krytyczniejsze podejście do oprogramowania...

Pochwalę się jeszcze, że ostatnio napisałem "bardzo dobry" skrypt
w Perlu, który spowodował, że w kościele dostałem SMS-em
informację jak "ładnie" działa (całe szczęście wibracyjnie ;). Jak
wróciłem, nie było już czego ratować. A tu niedziela, serwerownia
zamknięta, wtedy nie było nawet jak zdalnie zresetować. Koszmar
i wstyd :(

pozdroiwenia
aki
Re: ile wierszy?
#2088
Author: Metempsychoza
Date: Mon, 03 Sep 2001 21:48
16 lines
1687 bytes
Użytkownik "slawek-" <slawek@post.pl.NOSPAM> napisał w wiadomości
news:9n0n2g$3p1$1@news.tpi.pl...
> "Tomasz Kulawik" <tomasz.kulawik@gielda.civ.pl> napisał:
> > Sam ostatnio mialem przygode z "prostym" skryptem ktory niewiedzac czemu
> > wysylal wlasnie caly serwer w kosmos -)))
> > W porywach alokowal 1 GB RAMu!!! Absulutny odjazd
>
> Jak to się stało? Czyżbyś wyrzucił z php.ini poniższą linijkę ;-))
>
> memory_limit = 8M

ZTCP jest to ograniczenie w stosunku do jednej uruchomionej kopii skryptu,
wiec jesli server zaatakowala odpowiednio duza ilosc userow, to kto wie...
--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2094
Author: Metempsychoza
Date: Mon, 03 Sep 2001 22:17
29 lines
2237 bytes
Użytkownik "Andrzej Kierzkowski" <aki@helion.pl> napisał w wiadomości
news:3b93c5e6@news.vogel.pl...
>
> Użytkownik "slawek-" <slawek@irc.pl.NOSPAM> napisał:
> > "Metempsychoza" <metempsychoza@wp.pl> napisał:
> > > otwierasz plik, zliczasz wszystkie znaki konca linii:
> > > <?php
> > > $f = fopen ("plik.txt", "r");
> > > while (!feof ($f)) if (fgetc ($f) == "\n") $l++;
> > > fclose ($fd);
poprawka: fclose ($f);

> $f = fopen, while czyta plik po wierszu, obciążenie pamięci jest
> minimalne, nie ma problemu (ja bym pewnie jednak i tak skorzystał
> z "wc -l", bo na pewno żadnego z moich skryptów nie dam uruchomić
> na Win, a po co pisać coś, co ktoś napisał lepiej ;)

osobiscie jestem przeciw zaprzeganiu zewnetrznych programow do takich
pierdolek jak powyzsza
jesli swoja aplikacje podziurawisz przez system() i exec()  byc moze gdy
kiedys cos nawali to beda problemy ze zlokalizowaniem usterki. a nie ma nic
gorszego gdy cos sie popsulo a ty nie wiesz co jak i dlaczego
po drugie: bezpieczenstwo
zazwyczaj musisz traktowac jako niepewne dane  pochodzace z  get, post,
cookies a "dzieki" zewnetrznym programom dochodza kolejne furtki ktorych
nalezy pilnowac
--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2095
Author: Andrzej Kierzkowski
Date: Mon, 03 Sep 2001 23:19
66 lines
4381 bytes
Użytkownik "Metempsychoza" <metempsychoza@wp.pl> napisał

> osobiscie jestem przeciw zaprzeganiu zewnetrznych programow do takich
> pierdolek jak powyzsza
> jesli swoja aplikacje podziurawisz przez system() i exec()  byc moze gdy
> kiedys cos nawali to beda problemy ze zlokalizowaniem usterki. a nie ma
nic
> gorszego gdy cos sie popsulo a ty nie wiesz co jak i dlaczego
> po drugie: bezpieczenstwo
> zazwyczaj musisz traktowac jako niepewne dane  pochodzace z  get, post,
> cookies a "dzieki" zewnetrznym programom dochodza kolejne furtki ktorych
> nalezy pilnowac

Z jednej masz rację.

Z drugiej strony jak już się przyzwyczaisz, że warto dbać o bezpieczeństwo w
_każdym_ możliwym przypadku (czyli i przy danych zewnętrzych -- w PHP dane
z post i get, sesje, cookies są równie niebezpieczne --  i przy wywołaniu
procesów systemowych, _szczególnie_ jak "lepszymi" prawami niż nobody),
to ryzyko Ci odpada, a i zdrowszy będziesz.

(Metempsychoza -> to _nie_ są uwagi do Ciebie, to są przemyślenia ogólne ;)

IMO warto się przyzwyczaić, że nawet jak jest formularz, do którego tylko Ty
będziesz wpisywał dane, to te dane i tak trzeba obrobić. I jak jest
program, który będziesz tylko Ty wywoływał, wywołanie trzeba obrobić.

Oczywiście przykład z liczeniem wierszy był trywialny, i wywołanie
"wc -l" łatwo było (jak pokazałeś) zastąpić kilkoma wierszami w  PHP. Należy
jednak pamiętać, że istnieje wiele problemów, które łatwo
da się rozwiązać istniejącymi w systemie metodami, a napisanie ich
od nowa wymaga jednak kilku "dupogodzin". Warto je poświęcić,
jak już wiesz, jak można użyć bezpiecznie system czy exec?

W Perlu jest lepiej. Tam się nie waham, korzystam z "gotowców". Ale
CPAN-a dla PHP póki co nie ma.

Parokrotnie zdarzyło mi się mieć gotową bibliotekę z funkcjami. Raz
nie znałem kodu źródłowego (bo był supertajny). Szczerze powiedziawszy
wolałem napisać wrapper w C i gotowy program wywoływać exec-iem
(choć nie było to w PHP akurat), niż jakoś łączyć z Perlem. Wiem, że Perl
jest NTG, ale to tylko przykład.

Czyli IMHO:

1) Metempsychoza ma rację: jak coś się da napisać "tanio" (pod
każdym względem: finansowym i obliczeniowym (pamiętając o
procesorze, pamięci i złożoności) -- trzeba pisać.

2) Jak pisanie jest droższe, niż wykorzystanie dostępnego (sprawdzić
cenę) "gotowca" -- IMO trzeba wykorzystać gotowiec. Pamiętać trzeba,
że wiele narzędzi daje system (nie każdy, ale są takie, co dają, za darmo
i zaczynają się na L. ;) I nie bać się tego, że
wywoływanie procesów systemowych jest koszmarne i niebezpieczne.
Nawet jak "chodzą" z prawami roota, robią to,czego chce od nich twórca
skryptu, a nie jego użytkownik, o ile twórca zna się na rzeczy. Więc warto
właśnie pójść w tę stronę...

3) Jak się korzysta z dostępnch "gotowców" systemowych (typu wc -l), warto
pamiętać, że w innych systemach będzie się miało duzy problem. W moim
przypadku nie ma on znaczenia o tyle, że nigdy nie będę pisał nawet trzech
linijek tam, gdzie "wc -l" nie zadziała. Taką mam zasadę moralną, mimo tego,
że ten post piszę w OE. Ale warto mieć tego świadomość....

4) Tak czy inaczej powinno się wiedzieć, co jest bezpieczne dla systemu,
a co nie..
Re: ile wierszy?
#2096
Author: Metempsychoza
Date: Mon, 03 Sep 2001 23:55
22 lines
1797 bytes
Użytkownik "Andrzej Kierzkowski" <aki@helion.pl> napisał w wiadomości
news:3b940e62@news.vogel.pl...

> W Perlu jest lepiej. Tam się nie waham, korzystam z "gotowców". Ale
> CPAN-a dla PHP póki co nie ma.

a gruszka? (http://pear.php.net/)
wiem ze w porownaniu z cpan-em wypada blado (jeszcze), ale mysle ze warto
sie juz nia zainteresowac i przerzucic choc czesc pracy na jej barki

> 2) Jak pisanie jest droższe, niż wykorzystanie dostępnego (sprawdzić
> cenę) "gotowca" -- IMO trzeba wykorzystać gotowiec.

to troche rozleniwia, ale czego sie nie robi dla pieniedzy :-)

> Więc warto  właśnie pójść w tę stronę...
nie zawsze mozna
nie kazdy jest php coder & admin w jednym

--
metempsychoza(at)wp.pl
Re: ile wierszy?
#2089
Author: slawek-
Date: Tue, 04 Sep 2001 05:55
12 lines
1544 bytes
"Metempsychoza" <metempsychoza@wp.pl> napisał:
> > > W porywach alokowal 1 GB RAMu!!! Absulutny odjazd
> >
> > Jak to się stało? Czyżbyś wyrzucił z php.ini poniższą linijkę ;-))
> > memory_limit = 8M
>
> ZTCP jest to ograniczenie w stosunku do jednej uruchomionej kopii skryptu,
> wiec jesli server zaatakowala odpowiednio duza ilosc userow, to kto wie...

Siur, ale tutaj kolega pisał o skrypcie, który 1 GB zjadł. :-)

slawek-
Re: ile wierszy? [OT]
#2097
Author: leming nine
Date: Tue, 04 Sep 2001 15:43
23 lines
1587 bytes
> > W Perlu jest lepiej. Tam się nie waham, korzystam z "gotowców".
> > Ale CPAN-a dla PHP póki co nie ma.
> a gruszka? (http://pear.php.net/)
> wiem ze w porownaniu z cpan-em wypada blado (jeszcze), ale mysle
> ze warto sie juz nia zainteresowac i przerzucic choc czesc pracy
> na jej barki

A IMO gruszka to pomyłka dopóki w PHP nie zrobią _pakietów_.
Bo ileż podkreślników w nazwie klasy można stosować?!
O wiele przyjemniejsze byłoby zamiast:

require("Net/Ping.php");
$myPing = new Net_Ping();

...napisanie:

use org::cpan::pear::net::Ping;
$myPing = new Ping();

to mi przypomina Perla :)

--
l9
Re: ile wierszy?
#2080
Author: leming nine
Date: Tue, 04 Sep 2001 15:44
4 lines
937 bytes
> echo count(file("plik"));

sizeof() a nie count(), jeśli w ogóle stosować to rozwiązanie.
`count()' zwraca ilość nie-pustych wpisów do array'a. -- l9
Re: ile wierszy?
#2099
Author: leming nine
Date: Tue, 04 Sep 2001 15:46
10 lines
1123 bytes
> if (fgetc($f) == "\n")

nie wiem skąd to u mnie się wzięło, ale jakoś wolę
porównywać integery, są jakby bardziej "ścisłe" :)

$nlOrd = ord("\n");
if (ord(fgetc($f)) === $nlOrd)

--
l9
Re: ile wierszy?
#2081
Author: Leszek 'Leon' Krupiński
Date: Tue, 04 Sep 2001 15:52
15 lines
1353 bytes
Ship log, stardate: [-30]7198.7, leming nine reports:
> > echo count(file("plik"));
>  
>  sizeof() a nie count(),

Beeeep!

>  jeśli w ogóle stosować to rozwiązanie.
>  `count()' zwraca ilość nie-pustych wpisów do array'a. -- l9

A co zwraca file("plik") ?

-- 
              I am Heisenberg of Borg.  You might be assimilated.
 http://www.leon.w-wa.pl/ | pl.comp.www.server-side FAQ: http://pcwss.faq.pl/
Re: ile wierszy? [OT]
#2098
Author: Metempsychoza
Date: Tue, 04 Sep 2001 16:13
18 lines
1647 bytes
Użytkownik "leming nine" <l9spam@yt.ng.pl> napisał w wiadomości
news:9n2stm$onc$1@okapi.ict.pwr.wroc.pl...
> A IMO gruszka to pomyłka dopóki w PHP nie zrobią _pakietów_.
> Bo ileż podkreślników w nazwie klasy można stosować?!
> O wiele przyjemniejsze byłoby zamiast:
>
> require("Net/Ping.php");
> $myPing = new Net_Ping();
>
> ...napisanie:
>
> use org::cpan::pear::net::Ping;
> $myPing = new Ping();

wkrotce "use" bedzie dostepne (gdzies na zendzie wspominali)
--
metempsychoza(at)wp.pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads