Fügt einer CSV-Datei eine neue Zeile hinzu

Lesezeit: 2 Minuten

Wenn ich eine CSV-Datei auf einem Server gespeichert habe, wie kann ich PHP verwenden, um beispielsweise eine bestimmte Zeile zu schreiben 142,fred,elephants auf den Grund?

  • Das heißt anhängen Sehen Sie sich den Modus an, wenn Sie eine Datei öffnen, dort ist oft offen für das Anhängen mit Dateisystemfunktionen.

    – hakre

    9. Juli 2012 um 16:26 Uhr


Benutzer-Avatar
hakre

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

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

Fügen Sie dann Ihre Zeile hinzu (fputcsv­Dokumente):

fputcsv($handle, $line); # $line is an array of strings (array|string[])

Schließen Sie dann den Griff (fclose­Dokumente):

fclose($handle);

  • @fvu: Nicht wirklich. Das + ist nicht nötig, a allein erstellt die Datei auch, wenn sie nicht existiert. Das + dient der Leseunterstützung. Sehen “‘a’ Nur zum Schreiben öffnen; den Dateizeiger an das Ende der Datei setzen. Wenn die Datei nicht existiert, versuchen Sie, sie zu erstellen.” de.php.net/manual/en/function.fopen.php

    – hakre

    9. Juli 2012 um 16:30 Uhr


  • @Dale: War nicht so gemeint. Einen trivialeren letzten Satz hinzugefügt, der nicht so leicht falsch gelesen werden kann. Um hier niemanden zu verletzen.

    – hakre

    9. Juli 2012 um 17:01 Uhr


  • Wäre hilfreich, wenn du das mit einbeziehen würdest $line muss ein Array von Strings sein und nicht die eigentliche Zeile selbst.

    – Übercodieren

    29. Mai 2015 um 17:44 Uhr

  • @Overcode: Für die Zeile selbst verwenden fputs / fwrite – falls Sie einen Datensatz schreiben wollen, beenden Sie ihn mit Zeilenumbruch ("\n"), da dieses Zeichen normalerweise Datensätze in UNIX-Textdateien trennt.

    – hakre

    29. Mai 2015 um 20:45 Uhr

Sie können eine objektorientierte Schnittstellenklasse für eine Datei verwenden – SplFileObject http://php.net/manual/en/splfileobject.fputcsv.php (PHP 5 >= 5.4.0)

$file = new SplFileObject('file.csv', 'a');
$file->fputcsv(array('aaa', 'bbb', 'ccc', 'dddd'));
$file = null;

Benutzer-Avatar
Webentwicklerfreak

Diese Lösung funktioniert für mich:

<?php
$list = array
(
'Peter,Griffin,Oslo,Norway',
'Glenn,Quagmire,Oslo,Norway',
);

$file = fopen('contacts.csv','a');  // 'a' for append to file - created if doesn't exit

foreach ($list as $line)
  {
  fputcsv($file,explode(',',$line));
  }

fclose($file); 
?>

Ref: https://www.w3schools.com/php/func_filesystem_fputcsv.asp

Wenn Sie möchten, dass jede geteilte Datei die Header des Originals beibehält; Dies ist die modifizierte Version von Hakres Antwort:

$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);

1333400cookie-checkFügt einer CSV-Datei eine neue Zeile hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy