- Home
- Categorie
- Coding e Sistemistica
- Coding
- Operazioni con file CSV tramite PHP. Lettura + modifica + scrittura
- 
							
							
							
							
							Operazioni con file CSV tramite PHP. Lettura + modifica + scritturaSalve 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 benemi 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 
 
- 
							
							
							
							
							
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.
 
- 
							
							
							
							
							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 
 
- 
							
							
							
							
							
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); ?>
 
- 
							
							
							
							
							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 filead 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]
 
- 
							
							
							
							
							
esatto 
 potresti ricostruire un nuovo array con i valori modificati e salvare quello nel file.
 
- 
							
							
							
							
							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); ?>
 
- 
							
							
							
							
							aggiornamento 
 ce l'ho fatta a salvare con il delimitatore ;
 semplicemente inserendolo nel fputcsv
 cosi...
 fputcsv($destinazione, $arr, $delimiter = ';');grazie ancora di cuore!! 
 
- 
							
							
							
							
							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 
 
- 
							
							
							
							
							
in che senso una nuova intestazione? devi sostituire la precedente? 
 
- 
							
							
							
							
							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. 
 
- 
							
							
							
							
							
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? 
 
- 
							
							
							
							
							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); ?>