2012-07-09 16 views
27

Wenn ich eine CSV auf einem Server gespeichert habe, wie kann ich PHP verwenden, um eine bestimmte Zeile zu schreiben, sagen 142,fred,elephants auf den Grund davon?Hinzufügen einer neuen Zeile zu einer CSV-Datei

+1

dass genannt * Anfügen * den Modus sehen, wenn Sie eine Datei öffnen, da ist oft offen für das Anhängen von Dateisystemfunktionen. – hakre

Antwort

68

Öffnen Sie die CSV-Datei zum Anhängen (fopen­Docs):

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

dann Ihre Zeile hinzufügen (fputcsv­Docs):

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

Dann den Griff schließen (fclose­Docs):

fclose($handle); 

Ich hoffe, das ist hilfreich.

+3

@fvu: Nicht wirklich. Das '+' ist nicht notwendig, 'a' alleine erstellt die Datei auch, wenn sie nicht existiert. Das '+' dient zum Lesen der Unterstützung. Siehe * "'a' \t Nur zum Schreiben öffnen; den Dateizeiger am Ende der Datei platzieren. Wenn die Datei nicht existiert, versuchen Sie, sie zu erstellen." * Http://de.php.net/manual/en /function.fopen.php – hakre

+4

@Dale: War nicht so gemeint. Einen trivialisierenden letzten Satz hinzugefügt, der so leicht nicht so falsch gelesen werden kann. Um hier niemandem die Gefühle zu verletzen. – hakre

+0

Wäre hilfreich, wenn Sie hinzufügen, dass '$ line' ein Array von Strings sein muss und nicht die eigentliche Zeile. – Overcode

0

Wenn Sie jede Datei aufteilen möchten die Header des Originals zu halten; dies ist die modifizierte Version der Antwort des 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); 
Verwandte Themen