Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Leggere parole random da un file di testo

    Ciao a tutti
    Vorrei sapere se esiste un modo per leggere randomaticamente una parola da un file di testo..
    Con fgets() e simili non ho avuto i risultati sperati..

    Premetto che in tale file di testo le parole sono tante e di numero variabile (non voglio quindi metterle in un array) e sono separate semplicemente da spazi (non da virgole, \n, righe o simili)..
    Esempio contenuto file txt:
    codice:
    parola1 parola2 parola3 parola4 parola5 parola6 parola7 parola8 parola9 parola10 parola11 parola12 parola13 parola14 parola15 parola16
    Qualcuno può aiutarmi??
    Grazie 1000 anticipatamente a tutti coloro che risponderanno a questa discussione!
    Non appena avrò pronto lo script completo lo renderò pubblico!
    Ciaoo e ancora grazie,
    Dav

  2. #2
    se puoi mettere le parole una per riga è banale... tiri fuori un array con file() e poi randomizzi l'indice (perchè non vuoi usare gli array? guarda che in php sono id namici, non sono rigidi come in C.. sono la cosa migliore)

    Altrimenti leggi tutto il contenuto in un filee e usi explode() usando lo spazio come separatore

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Io avrei pensato a una soluzione del genere. Cmq secondo me ti complichi la vita gestendo le parole in questo modo.

    Codice PHP:
    $f_contents preg_split("/\s+/"implode(" "file("parole.txt")));

    $quante sizeof($f_contents);

    $casuale mt_rand(0,$quante-1);

    echo 
    "$f_contents[$casuale]"
    Uff, il forum gli slash e i backslash li gestisce per conto proprio.
    Prima della s ci vuole uno slash e poi un backslash.
    preg_split("/\s eccetera

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Personalmente farei in pseudocodice:

    codice:
    size = filesize(file);
    rand = rand(0, size);
    fpen(file);
    fseek(rand);
    while true() {
        while (true) {
           fgetc() finche' non trovi il primo spazio oppure eof
           if eof
              if rand - 10 > 0
                 fseek(rand - 10);
              else
                 il file non contiene spazi
        }
        fgetc() finche' non trovi un altro spazio oppure eof
        parola = byteFraIDueSpazi();
    }
    fclose(file);
    There are 10 types of people in the world - those who understand binary and those who don't.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    @frinkia. Non vale. Sei sempre troppo avanti.

  6. #6
    ma perchè tanto casino quando esiste explode e si fa in tre righe? :master:

  7. #7
    Siete troppo i migliori..
    ora faccio tutte le prove del caso e poi vi faccio sapere.. (:

  8. #8
    Allora allora
    Per cominciare un grossissimo grazie a tutti!
    Quanto allo scopo filantropico del mio progetto è quello di creare uno script tipo "SpamBotPoison" solo ke in php..
    Che ve ne pare come idea?
    I Mail bot si fanno ancora ingannare da indirizzi fasulli?
    (Io ci provo lo stesso.. :P)
    Cmq se la cosa funziona (e mi manca poco a finire il tutto),
    rilascio il progetto come OS sul mio sito o se volete anke qui!

    Frinkia.. La tua mi sembra una buona idea, ma non riesco a capire come trasformare in php la funzione "byteFraIDueSpazi()".. Se vuoi posto qui le prove, ma non riesco ad andarne fuori..

    Stufo di provare, ho deciso quindi di attuare la strada consigliatami da }gu|do[z]{®©, anche se non so se con file "pesanti ma non troppo" (es. 300k) possa dare problemi..
    Quante variabili tiene al max un array? Esiste un massimo?
    Dovrò eseguire la funzione più volte e su file diversi con cicli ripetuti.. (es. avrò un minimo di 4 files di testo: nomi.txt, cognomi.txt, domini.txt, estensioni.txt che andranno a comporre ogni indirizzo). Che problemi possono sorgere?

    Cmq ecco il codice che ho creato
    codice:
    $filelocation= "nomi.txt";
    $file = fopen($filelocation,"r");
    $content = fread($file, filesize($filelocation));
    $array = explode(" ", $content);
    fclose($file);
    $totwords = count($array);
    $numword = mt_rand(0,$totwords-1);
    $randword = $array["$numword"];
    echo "$randword";
    Cosa ve ne pare?
    Consigli?
    Grazie mille ancora e buonanotte!
    Dav

  9. #9
    Scusa Nicola75ss, mi sono dimenticado di menzionare il tuo script..Perdonooo..
    Da quel che vedo io non c'è molta differenza concettuale tra il mio e il tuo script.. Anche se il mio ha il doppio delle righe,
    il che mi lascia pensare che il tuo sia meglio del mio..
    Voi cosa ne dite??
    Riguardo ai problemi visti sopra?
    Entrambi gli script (il mio e quello di Nicola) utilizzano array..
    Esistono alternative?
    Grazie e buonanotte ancora!
    Ciaooo,
    Dav

    Ps: Riscrivo il mio codice rivisto per renderlo meglio confrontabile con quello di Nicola75ss:

    codice:
    $file = fopen("nomi.txt","r");
    $content = fread($file, filesize("nomi.txt"));
    $array = explode(" ", $content);
    fclose($file);
    $totwords = count($array);
    $numword = mt_rand(0,$totwords-1);
    echo "$array[$numword]";

  10. #10
    Originariamente inviato da azote
    Stufo di provare, ho deciso quindi di attuare la strada consigliatami da }gu|do[z]{®©, anche se non so se con file "pesanti ma non troppo" (es. 300k) possa dare problemi..
    Quante variabili tiene al max un array? Esiste un massimo?
    Tutto ha dei limiti... ma sono limiti fisici. insomma, finchè c'è memoria va. 300kb fanno il solletico a qualunque server moderno.
    E'chiaro che poi tuto si può ottimizzare..ma in questo caso credo basti eliminare l'array dopo aver preso il record random... ^_^

    Dovrò eseguire la funzione più volte e su file diversi con cicli ripetuti.. (es. avrò un minimo di 4 files di testo: nomi.txt, cognomi.txt, domini.txt, estensioni.txt che andranno a comporre ogni indirizzo). Che problemi possono sorgere?

    Cmq ecco il codice che ho creato
    codice:
    $filelocation= "nomi.txt";
    $file = fopen($filelocation,"r");
    $content = fread($file, filesize($filelocation));
    $array = explode(" ", $content);
    fclose($file);
    $totwords = count($array);
    $numword = mt_rand(0,$totwords-1);
    $randword = $array["$numword"];
    echo "$randword";
    Cosa ve ne pare?
    Consigli?
    Grazie mille ancora e buonanotte!
    Dav
    tranquillissimo..
    a parte che esiste array_rand()... ma siamo lì

    se vuoi dopo questo:
    $randword = $array["$numword"];
    puoi svuotare l'array se hai molta roba da fare dopo e non vuoi che quella memoria sia occupata inutilmente per tutto il tempo.

    Oltretuto con questo sistema ti leggi tutto il file in una volta (e sequenzialmente) e buonanotte... lavotando invece sul file aperto con diversi accessi non sequenziali finisci a risparmiare memoria ma a fare anche molti più accessi a disco probabilmente... quindi siam sempre lì.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.