Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Losowe wywoływanie tekstu, na pliku
D3vilroot
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.08.2006

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


Pewnie ten kod nie jest zbyt profesjonalny, ale po części działa więc nie obrzucajcie błotem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Tak to wygląda
Kod
<?php

$nr1 = fopen('wpis.txt', 'r');
$nr2 = fopen('wpis2.txt', 'r');
$nr3 = fopen('wpis3.txt', 'r');
$nr4 = fopen('wpis4.txt', 'r');
$nr5 = fopen('wpis5.txt', 'r');

$tresc1 = fread($nr1, filesize("wpis.txt"));
$tresc2 = fread($nr2, filesize("wpis2.txt"));
$tresc3 = fread($nr3, filesize("wpis3.txt"));
$tresc4 = fread($nr4, filesize("wpis4.txt"));
$tresc5 = fread($nr5, filesize("wpis5.txt"));
// definujemy teksty
$text=array(
   1 => $tresc1,
   2 => $tresc2,
   3 => $tresc3,
   4 => $tresc4,
   5 => $tresc5
);


// inicjujemy generator liczb losowych
srand((double) microtime() * 10000000);

// sprawdzamy ilość tekstów w tablicy
$ile = count($text);
// losujemy liczbę
$losowa = rand(1, $ile);

// wyświetlamy tekst
echo "<br><br><br>$text[$losowa]";
?>


Chciałbym wiedzieć jak zrobić, żeby pobrany tekst z pliku posiadał znaki zakończenia linii. Bo tak wygląda troche nieładnie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

I teraz druga sprawa. Chce zrobić tak, że będe pobierał linie z pliku funkcją file(). Wiem, że tworzy ona tablice i 1 element tablicy to 1 linia tekstu. Jak zrobić, żeby np. 20 linii z 10 stronowego tekstu pojawiało się przypadkowo, np.
Kod
15 linia
jakiś tam mój kod
23 linia
1 linia
znowu mój kod
itd.

I żeby żadna linia się nie powtarzała? Może to głupie pytania, ale troche już szukałem i udało mi się tyle, że linie się powtarzają.
Dzięki za przeczytanie i wszelką pomoc (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
Go to the top of the page
+Quote Post
MagnuM
post
Post #2





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


W moim przekonaniu ten kod jest straszny. No ale cóż.. przyałoby się żebyś wiedział właściwie dlaczego? Przyda Ci się na przyszłość ;-)

1. Otwierasz każdy plik pokolei, chociaż użyjesz tylko jednego z nich.
Prosta kwestia. Skrypt wykonywany jest strasznie długo. Co w momencie gdy plików będzie więcej?

2. Wczytujesz każdy plik do zmiennej. Bardzo długo to trwa. W przypadku większych plików zmienne zawierają straszne ilości danych, chociaż nie wiem czy to jest wada ? Zaleta na pewno nie...

3. W obecnej wersji php inicjowanie generatora liczb losowych nie jest wymagane!

Musisz wiedzieć, że php to przede wszystkim skrypty dynamiczne, a Ty nie wykorzystujesz jego możliwości.
Zdaje mi się, że to jest przypadek czytania przestarzałych, beznadziejnych kursów o php i potomych...

Więc sprawdźmy co da się tutaj zrobić ;-) O ile zaraz ktoś mnie nie wyprzedzi.

Zakładamy, że masz do dyspozycji 5 plików o charakterystycznej nazwie wpis%id (w przypadku jedynki bez %id).

  1. <?php
  2. // tablica z plikami
  3. $aFiles = array(
  4. 1 => 'wpis.txt',
  5. 2 => 'wpis2.txt',
  6. 3 => 'wpis3.txt',
  7. 4 => 'wpis4.txt',
  8. 5 => 'wpis5.txt'
  9. );
  10.  
  11. // zadeklarowanie ilości plików
  12. $iFilesCount = count( $aFiles );
  13.  
  14. // generowanie losowego pliku
  15. $iFileId = rand( 1, $iFilesCount );
  16.  
  17. // deklaracja uchwytu pliku
  18. $rFile = fopen( $aFiles[$iFileId], 'r' );
  19.  
  20. // odczyt pliku
  21. $sBody = fread( $rFile, file_size( $aFiles[$iFileId] ) );
  22.  
  23. echo $sBody;
  24. ?>


c.d.n Zaraz dopiszę reszte... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

EDIT:

Więc teraz kwestia zamiany znaków końca linii:

Przed wyświetleniem zmiennej $sBody należy wpisać następujący kod:
  1. <?php
  2. $sBody = str_replace( array("rn", "n", "r"), "<br />", $sBody );
  3. ?>


Co do ostatniego pytania o losowe linie, to zostawiam to jako zadanie domowe... żebym nie był taki dobry ;p
Podpowiem oczywiście, że można te linie które już były wyświetlone wrzucać do tablicy
  1. <?php
  2. $aExample[] = $iLine; // doda automatycznie nowy element tablicy
  3. ?>


... a później sprawdzać przy pomocy funkcji array_key_exists() czy dany element (linia) znajduje się już w tablicy.

Ten post edytował MagnuM 5.08.2006, 21:46:37
Go to the top of the page
+Quote Post
D3vilroot
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.08.2006

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


Właściwie to skorzystałem z gotowego skryptu znalezionego w sieci, tylko trochę go przerobiłem
tu masz adres
Losowy tekst na stronie
Może i zrobiłem to niewłaściwie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ale w Twoim kodzie też malutki błąd spotkałem u mnie serwer wywalił błąd
Kod
Fatal error: Call to undefined function: file_size()

dlatego zmieniłem file_size() na filesize()
Teraz popracuje troche nad drugim zadaniem.
Dzięki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)


Coś udało mi się zrobić (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)
Niewiem teraz jak zrobić żeby każda linia była inna. bo niestety nadal się powtarzają.
  1. <?php
  2. $i=1;
  3. while ($i<21)
  4. {
  5. $laduj = file('wpis.txt'); 
  6. // liczy ilosc linii w pliku
  7. $iloscLinii = count($laduj);
  8. // losuje linie
  9. $linia= rand(1, $iloscLinii);
  10. // wyswietla linie i jej numer
  11. echo "$i <b>Linia #$linia</b> ";
  12. echo "$laduj[$linia]<br>";
  13. $i++;
  14. }
  15. ?>


Ten post edytował D3vilroot 6.08.2006, 17:24:31
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Dlatego że losujesz za każdym razem, przy każdym obrocie pętli.

Zrób tak:
  1. <?php
  2.  
  3. $arrFile = file( 'wpis.txt' ); // wczytujesz wszystko do tablicy
  4.  
  5. shuffle( $arrFile ); // tasujesz/mieszasz tablicę
  6.  
  7. $intLinesCount = count( $arrFile ); // liczysz ilość linii
  8.  
  9. for( $i = 0; $i < $intLinesCount; $i++ ) //tablica jest indeksowana od zera
  10. {
  11. echo $arrFile[ $i ] . '<br />';
  12. }
  13.  
  14. ?>



P.S.
Przenoszę na Przedszkole.
Przeciez to wszystko to banalne wykorzystanie podstawowych funkcji z manuala.
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: 22.08.2025 - 20:01