Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Czy da się losowo zapisać linie wczytanego pliku ?
inomushis
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Witam, chciałem zapytać, czy w PHP istnieje możliwość zapisania lini odczytanego pliku w kolejności losowej.
Np, gdy mamy plik lista.txt:
Kod
a
b
c

Po wykonaniu skryptu wygląda on np tak:
Kod
b
c
a


Ten post edytował Cysiaczek 14.02.2008, 15:47:08
Powód edycji: dodalem tag (cysiaczek)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
GrayHat
post
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

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


http://php.net/explode
http://php.net/array_sort


--------------------
*Note: No animals were killed durning the construction of this post.
Go to the top of the page
+Quote Post
nowotny
post
Post #3





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Ja bym powiedział raczej:
file" title="Zobacz w manualu PHP" target="_manual
shuffle" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
inomushis
post
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Napisałem coś takiego:
Kod
<?php
$lines = file('playlista.lst');
shuffle($lines);
  foreach ($lines as $line_num => $line) {
      echo "$line";
}

?>

Wszystko ładnie działa, ale pojawił się mały problem.
Na końcu zawsze pojawia się jedna pusta linia kodu.
Jak usunąć ostatnią linie przez zapisaniem questionmark.gif
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





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




Zdejmij element z końca tablicy http://php.net.pl/manual/pl/ref.array.php


--------------------
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
inomushis
post
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Po zdjęciu elementu z tablicy znika jeden plik mp3, a pusta linia kodu nadal pozostaje.
Dodam, że w pliku playlista.lst w momencie umieszczenia go w tablicy nie ma żadnej wolnej linii.
Czy można usunąć tą linie w momencie zapisu do pliku questionmark.gif

Wiem, że można zapisać x lini do pliku, ale gdy dodam nowe mp3, będzie to niewygodne.
Jak sprawdzić, ile lini ma tablica questionmark.gif
Wtedy zapisałbym o jedną linie mniej smile.gif

Ten post edytował inomushis 14.02.2008, 15:58:08
Go to the top of the page
+Quote Post
nowotny
post
Post #7





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(inomushis @ 14.02.2008, 15:55:58 ) *
Po zdjęciu elementu z tablicy znika jeden plik mp3, a pusta linia kodu nadal pozostaje.
Dodam, że w pliku playlista.lst w momencie umieszczenia go w tablicy nie ma żadnej wolnej linii.

No bo pewnie zdejmujesz w złym momencie... zobacz jak wygląda tablica zaraz po pobraniu z pliku... pewnie jest jedna pusta linia na końcu pliku...

Ten post edytował nowotny 14.02.2008, 16:01:41
Go to the top of the page
+Quote Post
inomushis
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Na końcu nie ma żadnej wolnej linii.
Nawet gdyby była, to przecież używam
Kod
shuffle($lines);


i nie pozostałaby na końcu.
Wygląda to tak, jakby ta linia powstawała gdzieś poza tablicą.
Go to the top of the page
+Quote Post
nowotny
post
Post #9





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Eee... coś ściemniasz... biggrin.gif pokaż te tablice...
Go to the top of the page
+Quote Post
inomushis
post
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


oto kod
Kod
<?php
$lines = file('playlista.lst');
shuffle($lines);
  foreach ($lines as $line_num => $line) {
      echo "$line";
}

?>


A rezultat jest taki:
http://shells.pl/klnet/sort.php

Jak widać w kodzie źródłowym - na końcu pozostaje wolna linia.
Użycie array_pop - nic nie daje

Ten post edytował inomushis 14.02.2008, 16:19:02
Go to the top of the page
+Quote Post
nowotny
post
Post #11





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Ja powiedziałem pokaż tablice... czyli print_r($lines); przed i po shufflu...
Go to the top of the page
+Quote Post
inomushis
post
Post #12





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Już dopisałem.
Prosze bardzo smile.gif http://shells.pl/klnet/sort.php
Go to the top of the page
+Quote Post
nowotny
post
Post #13





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Hmm... no tak... "problemem" tu jest znak nowej linii importowany z pliku... każdy element w tablicy go zawiera przez co ostatni element też go ma...

Możesz użyć trim" title="Zobacz w manualu PHP" target="_manual żeby wywalić te znaki i potem w pętli dodawać je samemu sprawdzając czy dany element nie jest ostatnim (wtedy nie dodawać)...

Ten post edytował nowotny 14.02.2008, 16:33:03
Go to the top of the page
+Quote Post
kszychu
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


@nowotny, a nie prościej i szybciej trimnąć tylko ostatni element tablicy? smile.gif


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
nowotny
post
Post #15





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(kszychu @ 14.02.2008, 16:38:34 ) *
@nowotny, a nie prościej i szybciej trimnąć tylko ostatni element tablicy? smile.gif

No w sumie też można... biggrin.gif

[Pelagia]Czasem jak tak siądę i myślę...[/Pelagia]

Ten post edytował nowotny 14.02.2008, 16:41:08
Go to the top of the page
+Quote Post
inomushis
post
Post #16





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Gdybym to ja wiedział, jak to napisac rolleyes.gif
Go to the top of the page
+Quote Post
kszychu
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


  1. <?php
  2. $lines = file('playlista.lst');
  3. shuffle($lines);
  4. foreach ($lines as $line_num => $line) {
  5. if($line_num == count($lines)-1) $line = trim($line);
  6. echo "$line";
  7. }
  8.  
  9. ?>

Jasne? Mam nadzieję.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
inomushis
post
Post #18





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Jasne, dzięki.
Jak teraz, co 4 linijki dopisać "mp3/reklama.mp3" questionmark.gif
Go to the top of the page
+Quote Post
nowotny
post
Post #19





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


  1. <?php
  2. if($line_num % 3 == 0) echo 'mp3/reklama.mp3'."r\n";
  3. echo $line;
  4. ?>
Go to the top of the page
+Quote Post
inomushis
post
Post #20





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.02.2008

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


Działa.
Dzięki wszystkim za pomoc.
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 Aktualny czas: 22.08.2025 - 03:51