Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Numerownie lini pliku
kiler129
post 27.05.2007, 17:33:29
Post #1





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Mam sobie plik x.txt i chce aby kazda linia tego pliku miała numer np. taki plik:

cos
jasio
kasia
marysia

zaminiał się w to:

1. cos
2. jasio
3. kasia
4. marysia

No i problem ejst tego rodzaju ze juz pomysłów mi brak Rkingsmiley.png

Dla testów napisałęm coś takiego:

  1. <?php
  2. $fp = fopen('test.txt', "r");
  3. $data = fread($fp, filesize('test.txt'));
  4. $data = explode("n", $data);
  5.  
  6. $i = 0;
  7. while(count($data) >= $i)
  8. {
  9. $data[$i] = $i.'.'.$data[$i];
  10. $i++;
  11. } 
  12.  
  13. var_dump($data);
  14. ?>


I po 3 sec dziłąnia na pliku z 3 liniami otrzymuje takie coś:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16 bytes) in G:\httpd\scan\num.php on line 7

Prosze o pomoc !


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
strife
post 27.05.2007, 17:41:54
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Użyj do tego file" title="Zobacz w manualu PHP" target="_manual winksmiley.jpg

  1. <?php
  2. foreach( file('dupa.txt') as $line => $value ) {
  3. echo ( $line + 1 ) . '. ' . $value;
  4. }
  5. ?>


@kwiateusz - Ha tongue.gif


--------------------
Go to the top of the page
+Quote Post
kiler129
post 27.05.2007, 18:34:15
Post #3





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


A tak z ciekawości dlaczego moj kod tak dziwnie działa tongue.gif ?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
Cysiaczek
post 28.05.2007, 08:58:53
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Dlatego, że warunek
  1. <?php
  2. while(count($data) >= $i)
  3. ?>

jest zawsze prawdziwy - przy każdej iteracji.
Powinno być
  1. <?php
  2. while($i <= count($data))
  3. ?>


Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Kicok
post 28.05.2007, 19:54:30
Post #5





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Cytat
jest zawsze prawdziwy - przy każdej iteracji.
Powinno być
  1. <?php
  2. while($i <= count($data))
  3. ?>


Przecież to jest to samo.


Cytat
A tak z ciekawości dlaczego moj kod tak dziwnie działa tongue.gif ?

Klucze tablicy $data zaczynają się od zera, więc liczba elementów twojej tablicy będzie zawsze "maksymalny klucz + 1"
Na przykład jeśli zmienna $i ma wartość 3, to ilość elementów tablicy będzie równa co najmniej 4 (0,1,2,3). Zmienną $i jest w pętli inkrementowana ($i++), więc przy sprawdzaniu warunku też będzie miała wartość 4, czyli warunek:
( count($data) >= $i ) zawsze będzie prawdą

W dodatku twój kod numerowałby linijki od zera ;]


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Cysiaczek
post 28.05.2007, 22:03:15
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@Kicok - : > Przemyśl raz jeszcze, bo różnica jest i to wielka jak kanion.
count($data) jest niemal jak stała. Jest ogranicznikiem.

Twierdzisz, że te zdania są równe?
"Dopuki ilośc elelemntów w tablicy jest większa niż aktualna $i, rób coś"
- ilośc elementów zawsze będzie większa niz $i, bo jest większa niż 0, a $i ciągle rośnie

"Dopuki $i jest mniejsza od ilości elelemntów w tablicy, rób coś"
- tu jest szansa, że kiedyś się pętla skończy

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Kicok
post 29.05.2007, 08:50:44
Post #7





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


http://rafb.net/p/n1Ulr250.html

Bociana dziobał szpak, a potem była zmiana i szpak dziobał bociana.




PS. Sorka, że nie wklejam kodu tutaj, ale mam problemy z internetem i nie jestem wysłać na raz niczego ponad 2kB :/


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Cysiaczek
post 29.05.2007, 10:24:33
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Fakt. Masz rację. Rzeczywiście obie pętle działają identycznie - nie wiem co mi się ubzdurało : >

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 15:32