2012-07-09 22 views
27

Se ho un CSV salvato su un server, come posso utilizzare PHP per scrivere una determinata riga, ad esempio 142,fred,elephants in fondo?Aggiungere una nuova riga a un file CSV

+1

che si chiama * aggiungendo * vedere la modalità quando si apre un file, non ci spesso è aperto per l'aggiunta con le funzioni del file system. – hakre

risposta

68

Aprire il file CSV per aggiungendo (fopen­Docs):

$handle = fopen("test.csv", "a"); 

Allora aggiungi la tua linea (fputcsv­Docs):

fputcsv($handle, $line); # $line is an array of string values here 

Poi chiudere la maniglia (fclose­Docs):

fclose($handle); 

Spero che questo sia utile.

+3

@fvu: Non proprio. '+' Non è necessario, 'a' da solo crea il file anche se non esiste. '+' È per il supporto alla lettura. Vedi * "'a' \t Apri solo per scrittura, posiziona il puntatore del file alla fine del file.Se il file non esiste, prova a crearlo." * Http://de.php.net/manual/en /function.fopen.php – hakre

+4

@Dale: non è stato pensato in questo modo. Aggiunta una frase finale più banale che non può essere letta troppo facilmente. Non ferire i sentimenti di nessuno qui. – hakre

+0

Sarebbe d'aiuto se tu avessi compreso che '$ line' deve essere un array di stringhe, piuttosto che la linea vera e propria. – Overcode

0

Se si desidera che ogni file diviso per mantenere le intestazioni dell'originale; questa è la versione modificata della risposta di hakre:

$inputFile = './users.csv'; // the source file to split 
$outputFile = 'users_split'; // this will be appended with a number and .csv e.g. users_split1.csv 

$splitSize = 10; // how many rows per split file you want 

$in = fopen($inputFile, 'r'); 
$headers = fgets($in); // get the headers of the original file for insert into split files 
// No need to touch below this line.. 
    $rowCount = 0; 
    $fileCount = 1; 
    while (!feof($in)) { 
     if (($rowCount % $splitSize) == 0) { 
      if ($rowCount > 0) { 
       fclose($out); 
      } 
      $out = fopen($outputFile . $fileCount++ . '.csv', 'w'); 
      fputcsv($out, explode(',', $headers)); 
     } 
     $data = fgetcsv($in); 
     if ($data) 
      fputcsv($out, $data); 
     $rowCount++; 
    } 

    fclose($out); 
Problemi correlati