Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Estrarre dati da file csv

    ciao a tutti,
    navigando ho trovato questo script che mi permette di estrarre i dati da un file .csv e me li stampa a video
    Codice PHP:
    <?php
    print "<table border=1 width=90% >";
    $fdfopen ("file.csv""r");
    $x=0;
    while (!
    feof ($fd))
    {
    $riga=fgets($fd4096);
    if(
    $riga!="")
    {
    $arr=split(';'$riga);
    print 
    "<tr>";
    print 
    "<td>".$arr[19]."</td>";
    print 
    "<td>".$arr[7]."</td>";
    print 
    "<td>".$arr[6]."</td>";
    print 
    "<td>".$arr[9]."</td>";

    print 
    "</tr>";
    $x++;
    }
    }
    print 
    "</table>";
    fclose($fd);
    ?>
    Ma io ho bisogno che inserendo un codice utente attraverso un form mi estragga e visualizzi la riga corrispondente. Insomma che il file csv funzioni come mysql.
    Grazie a chi mi potrà aiutare.

  2. #2

    Un passo avanti

    Ho modificato il codice.
    Ho inserito la funzione in_array per verificare che ci fosse il codice ma io vorrei che estragga la riga solo se il codice è esattamente lo stesso.

    questo il nuovo codice
    Codice PHP:
    <?
    //controlliamo la presenza del parametro d'invio
    if(isset($_POST['invia']))
    {
      
    $submit $_POST['invia'];
      
    $nome trim(stripslashes($_POST['nome']));
      if (
    $nome!=="")
      {
        echo print 
    "<table border=1 width=90% >";
    $fdfopen ("file.csv""r");
    $x=0;
    while (!
    feof ($fd))
    {
    $riga=fgets($fd4096);
    if(
    $riga!="")
    {
    $arr=split(';'$riga);
    if (
    in_array("$nome"$arr)) {
    print 
    "<tr>";
    print 
    "<td>".$arr[19]."</td>";
    print 
    "<td>".$arr[7]."</td>";
    print 
    "<td>".$arr[6]."</td>";
    print 
    "<td>".$arr[9]."</td>";

    print 
    "</tr>";
    $x++;
    }
    }
    }
    print 
    "</table>";
      }else{
        echo 
    "Non hai inserito il nome.";}
    }else{
      
    //nel caso in cui manchi il parametro d'invio 
      //verrà visualizzato il form
    ?>
    <form method="POST" action="form.php">
    Inserisci un nome:
    <input type="text" name="nome">
    <input type="submit" name="invia" value="Invia">
    </form>
    <?
    }
    ?>

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    a parte che usare split è deprecato, ma poi perché non usi la funzione fgetcsv che fa già quello che devi fare?
    Un esempio qua sotto
    Codice PHP:
    <?php
    // il file da cui prendere i dati
    $csv "test.csv";

    // termine da cercare
    $term "trovami";

    // imposto il separatore
    $sep ";";

    $mark 1// per la segnalazione di uscita
    $iteraction 1// per sapere a che riga ho l'occorrenza

    // apro il file e lo scorro
    if (($handle fopen($csv"r")) !== FALSE) {
        while ((
    $data fgetcsv($handle1000$sep)) !== FALSE) {
            
            
    // conto il numero di campi
            
    $num count($data);
            
            
    // una stringa per preparare l'output a video
            
    $output ""
            
            
    // controllo se c'è il termine
            
    if (in_array($term$data)) {
                
                
    // preparo la stringa di output
                
    for ($i 0$i<$num$i++) {            
                    
    $output .= $data[$i] . " - ";
                }
                
                
    // mostro a video
                
    echo "alla riga $iteraction ho trovato '$term': ";
                echo 
    substr($output,0,-3). "
    "
    ;
                
                
    // setto la variabile per segnalare un successo nella ricerca
                
    $mark 0;
                
            }
        
        
    // incremento il numero di riga
        
    $iteraction++;
        
        }
    }

    // se non ha trovato nulla mostro il messaggio di uscita
    if ($mark != ) {
        echo 
    "nessuna occorrenza di $term 
    "
    ;
    }

    ?>
    il file test.csv
    codice:
    a;b;c
    d;f;g
    c;f;a
    trovami;a;c
    a;s;d
    sono;qui;trovami
    ciao

  4. #4

    si però

    potrebbe essere una soluzione ma io ho bisogno che:
    il controllo del $term sia fatto non nella riga ma nel campo specifico del codice utente, cioè mi mostri tutte le righe di quello specifico utente.

    Nel tuo esempio se nella riga c'è un valore uguale per un utente diverso questo viene mostrato a video.

    Poi di quella riga devo mostrare solo alcuni campi (non tutti)

    Ciao e grazie

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ah, allora la cosa si complica...

    devi solo cambiare
    Codice PHP:
    // controllo se c'è il termine 
            
    if (in_array($term$data)) { 
    con
    Codice PHP:
    // controllo se c'è il termine
            
    if ($data[0] === $term) { 
    considerando che il primo campo è il tuo "codice utente".

    Per quanto riguarda i campi che devi mostrare, quelli li decidi tu: il mio era un esempio "di scuola", sta a te scrivere lo script definitivo che faccia ciò che ti serve

  6. #6

    Grazie

    vediamo se mi riesce. Non ho queste grandi conoscenze di php.
    Devo dire che l'esempio è ottimo e così penso di poterlo utilizzare.

    Grazie ancora

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    se serve, siamo qua

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    1
    Salve a tutti,
    mi aggancio a questa discussione perchè inerente con la mia domanda.
    Quello che sto cercando di fare (ho poche conoscenze di php) è la seguente operazione:

    1. file .csv in input
    2. estrarre dal file csv i valori di una data colonna
    3. memorizzare in 4 variabili 4 insiemi dei valori della colonna estratta sottoforma di somma algebrica
    4. eseguire un'operazione algebrica semplice su ciascuna variabile
    5. stampare a schermo i 4 risultati finali.

    faccio un esempio:
    nella colonna 5 del file csv ci sono i seguenti valori: 1,2,3,4,5,6,7,8,9,10,11,12
    questi valori vanno inseriti in 4 variabili con criterio da 1 a 3 --> var1, da 4 a 6 --> var2 ecc per avere:
    var1=6
    var2=15
    var3=24
    var4=33
    infine dovrò sottrarre da ciascuna variabile una costante x e stampare il valore a schermo.

    Ho preso spunto dal codice che avete postato ma mi sono bloccato al punto 2..

    lo riporto di seguito:

    Codice PHP:
    <?php 
    // il file da cui prendere i dati 
    $csv "live.csv"



    // imposto il separatore 
    $sep ","

    $mark 1// per la segnalazione di uscita 
    $iteraction 1// per sapere a che riga ho l'occorrenza 

    // apro il file e lo scorro 
    if (($handle fopen($csv"r")) !== FALSE) { 
        while ((
    $data fgetcsv($handle1000$sep)) !== FALSE) { 
             
            
    // conto il numero di campi 
            
    $num count($data); 
             
            
    // una stringa per preparare l'output a video 
            
    $output "";  
             
            
    // controllo se c'è il termine 
            
    if ($data[5] !== 0) {  
                 
                
    // preparo la stringa di output 
                          
                    
    $output .= $data[5] . " - "
               
                 
                
    // mostro a video 
                
    echo "alla riga $iteraction ho trovato: "
                echo 
    substr($output,0,-3). "
    "

                 
                
    // setto la variabile per segnalare un successo nella ricerca 
                
    $mark 0
                
                
            }
         
        
    // incremento il numero di riga 
        
    $iteraction++; 
         
        } 


    // se non ha trovato nulla mostro il messaggio di uscita 
    if ($mark != ) { 
        echo 
    "nessuna occorrenza di $term 
    "



    ?>

    Spero che qualcuno abbia qualche suggerimento da darmi
    Grazie mille

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    non è che abbia capito molto di cosa intendi fare...

    andando con ordine:
    - una riga del file csv come è composta? Puoi mettere un esempio?
    - i valori della "colonna 5" sono sempre 12? Come sono separati tra loro?

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.