• User Attivo

    Operazioni con file CSV tramite PHP. Lettura + modifica + scrittura

    Salve a tutti
    ho la necessità di leggere un file da cvs , modificarlo e scriverlo successivamente.

    Sono riuscito a prendere un file csv e stamparlo a video
    Successivamente sono riuscito anche a fare delle modifiche al file ( creazione condizioni , concatena e operazioni algebriche)
    Fin qui tutto bene

    mi blocco invece ora nel salvare questo file?
    come si fa?

    stampando a video il file, questo viene di per se messo in tabelle
    per farlo ritornare in csv come posso fare?

    ho visto questa funzione ma come posso applicarla al mio file cvs?

    [PHP]<?php
    $list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
    );
    $fp = fopen('file.csv', 'w');
    foreach ($list as $fields) {
    fputcsv($fp, $fields);
    }
    fclose($fp);
    ?>[/PHP]

    grazie del vostro aiuto


  • User Attivo

    Ciao
    questa è già di per se la funzione di salvataggio del csv.
    Attraverso il foreach stai attraversando il tuo array, riga per riga, e lo stai salvando nel file.


  • User Attivo

    grazie per la risposta
    il mio file csv lo apro a video cosi e riesco anche a fare tutte le modifiche

    [PHP]
    <?php
    print "<table border=1 width=90% >";
    $fd= fopen ("file.csv", "r");
    $x=0;
    while (!feof ($fd))
    {
    $riga=fgets($fd, 4096);
    if($riga!="")
    {
    $arr=split("|", $riga);
    print "<tr>";
    print "<td>".$arr[0]."</td>";
    print "<td>".$arr[1]."</td>";
    print "<td>".$arr[2]."</td>";
    print "<td>".$arr[3]."</td>";
    print "<td>".$arr[4]."</td>";
    print "</tr>";
    $x++;
    }
    }
    print "";
    fclose($fd);
    ?>
    [/PHP]

    ma come posso farlo risalvare in csv il file?

    grazieeee


  • User Attivo

    Ciao
    io proverei così:

    
    
    <?[php](http://www.giorgiotave.it/wikigt/os/PHP) 
    print "<table border=1 width=90% >";
    $fd= fopen ("file.csv", "r");
    $destinazione = fopen('destinazione.csv', 'w');
    $x=0; 
    while (!feof ($fd))
    {   
      $riga=fgets($fd, 4096);   
      if($riga!="")   
      {
        $arr=split("\|", $riga);      
        print "<tr>";      
        print "<td>".$arr[0]."</td>";      
        print "<td>".$arr[1]."</td>";      
        print "<td>".$arr[2]."</td>";      
        print "<td>".$arr[3]."</td>";      
        print "<td>".$arr[4]."</td>";           
        print "</tr>";     
        $x++;
      }
      fputcsv($destinazione, $arr);
    }
    print "";
    fclose($fd);
    flcose($destinazione);
    ?>
    
    

  • User Attivo

    Grazie mille
    finalmente ho fatto un passo in avanti e riesco ora a sbloccarmi
    ti volevo chiedere come faccio ad inserire un valore modificato nell'array?
    a video lo vedo ma non me la salva nel file

    ad esempio la 5 colonna la voglio moltiplicare per 100
    e faccio questa cosa ma nonostante la vedo a video non la vedo nel file salvato.
    il valore deve essere poi inserito nell'array vero?
    come faccio?

    grazieeee

    [PHP]
    <?php print "<table border=1 width=90% >";
    $fd= fopen ("file.csv", "r");
    $destinazione = fopen('destinazione.csv', 'w');
    $x=0;
    while (!feof ($fd))
    {
    $riga=fgets($fd, 4096);
    if($riga!="")
    {
    $arr=split("|", $riga);
    $a= $arr[4] * 100;
    print "<tr>";
    print "<td>".$arr[0]."</td>";
    print "<td>".$arr[1]."</td>";
    print "<td>".$arr[2]."</td>";
    print "<td>".$arr[3]."</td>";
    print "<td>".$a."</td>";
    print "</tr>";
    $x++;
    }
    fputcsv($destinazione, $arr);
    }
    print "";
    fclose($fd);
    flcose($destinazione);
    ?>
    [/PHP]


  • User Attivo

    esatto
    potresti ricostruire un nuovo array con i valori modificati e salvare quello nel file.


  • User Attivo

    ce l'ho fatta
    ho semplicemente variato:
    $arr[3]= $arr[3] * 100;

    ti chiedo un ultima cosa.
    il file di partenza file.csv ha come separatore il ; ma il file salvato destinazione.csv ha come separatore la ,
    come posso dare anche alla destinazione il ; come separatore?

    <?php print "<table border=1 width=90% >";
    $fd= fopen ("file.csv", "r");
    $destinazione = fopen('destinazione.csv', 'w');
    $x=0; 
    while (!feof ($fd))
    {     
    $riga=fgets($fd, 4096);     
    if($riga!="")     
    {    
    $arr=split(";", $riga);   
      
    **$arr[3]= $arr[3] * 100;** 
    
    print "<tr>";          
    print "<td>".$arr[0]."</td>";          
    print "<td>".$arr[1]."</td>";          
    print "<td>".$arr[2]."</td>";          
    print "<td>".$arr[3]."</td>";                     
    print "</tr>";         
    $x++;  
    }  
    fputcsv($destinazione, $arr);
    }
    print "";
    fclose($fd);
    flcose($destinazione);
    ?>
    

  • User Attivo

    aggiornamento
    ce l'ho fatta a salvare con il delimitatore ;
    semplicemente inserendolo nel fputcsv
    cosi...
    fputcsv($destinazione, $arr, $delimiter = ';');

    grazie ancora di cuore!!


  • User Attivo

    Ragazzi scusatemi se apro nuovamente la discussione.
    Lo script php funziona a meraviglia ma mi occorre una piccolissima modifica
    Nel file cvs salvato mi occorre che sia presente una nuova intestazione di colonne.
    Come posso crearla?

    Grazie ancora


  • User Attivo

    in che senso una nuova intestazione? devi sostituire la precedente?


  • User Attivo

    In pratica mi occorre che il nuovo file cvs generato abbia un titolo di colonne nuovo anche perchè in alcuni casi le colonne create sono nuove e mi occorre scrivere per tutte le nuove colonne un titolo per facilitarne poi l'uso.


  • User Attivo

    Se devi solo cambiare l'intestazione delle colonne potresti aggiungere la nuova intestazione prima del primo giro di lettura del file. Inizi con l'intestazione e successivamente accodi il file letto come stai già facendo, può andare o sono sulla strada sbagliata?


  • User Attivo

    riesco solo a stampare i titoli di colonne a video ma non a salvarlo
    ho modificato cosi il file
    e riesco solo a vederle nel file a video ma nel csv di destinazione che si salva non appaiono..

    <?php print "<table border=1 width=90% >";$fd= fopen ("file.csv", "r");
    $destinazione = fopen('destinazione.csv', 'w');
    // Intestazione Tabella
    print "<tr>";
    print "<td>COLONNA 1</td>";
    print "<td>COLONNA 2</td>";
    print "<td>COLONNA 3</td>";
    print "<td>COLONNA 4</td>";
    print "</tr>";
    $x=0; 
    while (!feof ($fd))
    {     
    $riga=fgets($fd, 4096);     
    if($riga!="")     
    {    
    $arr=split(";", $riga);   
      
    $arr[3]= $arr[3] * 100; 
    
    
    print "<tr>";          
    print "<td>".$arr[0]."</td>";          
    print "<td>".$arr[1]."</td>";          
    print "<td>".$arr[2]."</td>";          
    print "<td>".$arr[3]."</td>";                     
    print "</tr>";         
    $x++;  
    }  
    fputcsv($destinazione, $arr);
    }
    print "";
    fclose($fd);
    flcose($destinazione);
    ?>