Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Numerownie lini pliku
kiler129
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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 !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
strife
post
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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


@kwiateusz - Ha (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
kiler129
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ?
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post
Kicok
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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 ;]
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post
Kicok
post
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 :/
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 03:43