Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Nix82
    Registrato dal
    Oct 2001
    residenza
    Mussolente (VI)
    Messaggi
    1,122

    [PILLOLA] Ricerca in un file di testo

    In questa pillola trattiamo la ricerca su un file di testo in cui è contenuto un vettore.
    Come spiegato già da boomboom69 in questa pagina si può sovrascrivere sui file di testo in questa maniera:
    Codice PHP:
     $fp fopen("testi.txt""a");
     
    fputs($fp'Dati che vogliamo immettere');
     
    fclose($fp); 
    Poniamo di avere uno o più file txt con all'interno un vettore che ogni volta viene caricato con i dati che vogliamo. Faccio l'esempio del file che tratteremo, testi.txt. Il file originale sarà:
    Codice PHP:
     <?php $testi = array();
    da notare che non serve chiudere il file con ?>

    Alcuni si domanderanno il perchè su i file di testo ci devono essere vettori. La risposta è semplice: praticità e semplicità di script. Se si lavora abbastanza con i file di testo si può notare che questo è un metodo rapido e veloce.

    Ogni volta che ci aggiungeremo dati (che sono di qualsiasi genere, nel nostro caso, testi e non singole parole) il nostro vettore si implementerà in questa maniera (vado a capo solo per problemi di impaginazione)

    Codice PHP:
    <?php $testi = array();
    $testi[] = 'ciao a tutti, pillola del 25 agosto';
    $testi[] = 'discutine sul forum di html.it';
    $testi[] = 'asp: se lo conosci lo eviti';
    $testi[] = 'http://freephp.html.it risorse free su php per webmaster. Vieni a scoprire le novità';
    ponendo particolare attenzione che quando andiamo a sovrascrivere sul file di testo dobbiamo aggiungere gli backslash con
    addslashes
    altrimenti ci troviamo un bell'apice che darà sicuramente errore.

    A questo punto dobbiamo costruire il form html con la parola da ricercare indirizzandolo verso risultati.php che conterrà il seguente script (all'input del form ho dato name="parola").

    Prima parte: verifica dell'avvenuto invio tramite metodo post della parola da ricercare. Inoltre verifico che la parola non sia composta di soli spazi.
    Codice PHP:
    isset($_POST['parola']) ? $parola $_POST['parola'] : $parola null;
    if(
    $parola != null && trim($parola) != "") {
       
    //qui ci andrà tutto il nostro script
    } else {
        echo 
    "Parametro inviato non valido";

    Seconda parte: tutto lo script che andrà dentro alla condizione IF appena vista. Cominciamo col settare un po di variabili e a includere il file txt che contiene il testo per la ricerca...
    Codice PHP:
    include("testi.txt"); //includo il file di testo che ha all'interno il vettore $testi
    $var[] = array(); //dichiaro una matrice (non un vettore)
    $trovato false//dichiaro una variabile booleana
    $risultati = array(); //dichiaro un vetttore
    $parola strtoupper($_POST['parola']); //trasformo in caratteri grandi tutti i carattrei di $parola 
    Non ho fatto altro che includere il file txt carico di tutti i nostri testi, dichiarare falsa una variabile booleana, dichiarare un vettore $risultati che conterrà i possibili risultati (se ci saranno) della ricerca e infine ho trasformato tramite la funzione strtoupper i caratteri di $parola, portandoli tutti a caratteri grandi.
    Un po di attenzione alla matrice $var che ha dimensione NxM e non è un vettore che ha dimensione 1xN.

    Terza parte: cominciamo a riempire la matrice $var di tutte le parole. Come si fa ? Con un semplice explode
    Codice PHP:
    for($i $i count($testi) ; $i++) {
       
    $var[$i] = $testi[$i];
       
    $var[$i] = explode(" " $var[$i]);    

    Riassumendo, $var è una matrice di questo genere:
    codice:
    ciao       discutine      asp:        http://freephp.html.it
     a           sul             se               risorse
    tutti,      forum            lo                free
    pillola       di          conosci               su
     del        html.it          lo                php
     25                        eviti                per
    agosto                                      webmaster.
                                                    ...
                                                    ...
    che ad ogni colonna corrisponde una lunghezza diversa della riga.

    Quarta parte: verifico se la ricerca va a buon fine. Per fare ciò ho bisogno di un doppio ciclo FOR, uno per le colonne, l'altro per le righe.
    Codice PHP:
    for($i $i count($var) ; $i++) {
               for(
    $j $j count($var[$i]) ; $j++) {
                    if( 
    $parola ==  strtoupper($var[$i][$j]) ) {
                        
    $trovato true;
                        
    $articoli[] = $i;
                        continue;
                    }
           }

    tenendo conto che count($var) = numero di colonne e count($var[$i]) = numero di righe alla colonna iesima.
    Se la parola alla colonna i e alla riga j è uguale alla parola inviata dal form allora la variabile booleana cambia di valore e il vettore articoli si incrementa del numero dell'articolo (o del testo).

    Quinta parte: interazione con l'utente. Si verifica il valore della variabile booleana e in base ad esso si stampa a video il voluto...
    Codice PHP:
    if($trovato) {
        for(
    $i 0$i count($articoli) ; $i++) {

            if(
    $articoli[$i] != $articoli[$i-1]) {
                echo 
    "La parola cercata è nell'articolo numero: $articoli[$i]";
            }
        }
    } else {
        echo 
    "Nessun recordo trovato";

    La condizione if($articoli[$i] != $articoli[$i-1]) serve per non ripetere l'articolo più volte. Mi spiego. Se la parola da ricercare è contenuta N volte nello stesso testo la ricerca darà N volte risultati solo di quel testo (cosa alquanto indesiderata, mi basta saperlo una sola volta giusto?). Per evitare questo spiacevole inconveniente basta porre quella condizione.

    PRO/CONTRO di questo metodo: PRO -> semplicità del codice, velocità di esecuzione e relativamente efficente anche senza db.
    CONTRO -> cose del genere ciao. | bene, | cosa? non vengono trovate in quanto ciao. != ciao , bene, != bene ecc.

    OK io ho finito qui. Sperando di essere stato chiaro, di non aver sbagliato niente e di non essere stato ripetitivo con la pillola di boom , vi auguro buon proseguimento...
    La cultura è il nostro passaporto per il domani. Il futuro appartiene alle persone che si preparano oggi.
    Martin Luther King

  2. #2

    Re: [PILLOLA] Ricerca in un file di testo

    Originariamente inviato da Nix82
    OK io ho finito qui. Sperando di essere stato chiaro, di non aver sbagliato niente e di non essere stato ripetitivo con la pillola di boom , vi auguro buon proseguimento...
    [/font]
    Non sta a me di certo giudicare certe questioni ma credo che tu abbia in effetti fatto proprio questo!!!
    Comunque un ripasso a volte non fa mai male!!
    (p.s. = mi sono ripassato la pillola di boomboom69 )
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

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.