2012-07-09 18 views
27

Si tengo un archivo CSV guardado en un servidor, ¿cómo puedo usar PHP para escribir una línea determinada, digamos 142,fred,elephants en la parte inferior?Agregue una nueva línea a un archivo CSV

+1

que se llama * añadiendo * ver el modo cuando se abre un archivo, hay a menudo está abierto para agregarse con las funciones del sistema de archivos. – hakre

Respuesta

68

Abrir el archivo CSV para añadir (fopen­Docs):

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

Publique sus líneas (fputcsv­Docs):

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

continuación, cierre la manija (fclose­Docs):

fclose($handle); 

Espero que esto sea útil.

+3

@fvu: No realmente. El '+' no es necesario, 'a' solo crea el archivo también si no existe. El '+' es para soporte de lectura. Consulte * "'a' \t Abierto sólo para escritura, coloque el puntero del archivo al final del archivo. Si el archivo no existe, intente crearlo." * Http://de.php.net/manual/en /function.fopen.php – hakre

+4

@Dale: No fue así. Se agregó una frase final más trivial que no se puede leer tan mal tan fácilmente. No herir los sentimientos de nadie aquí. – hakre

+0

Ayudaría si incluyese que '$ line' necesita ser una matriz de cadenas, en lugar de la línea misma. – Overcode

0

Si desea que cada archivo dividido para retener las cabeceras del original; esta es la versión modificada de la respuesta de 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); 
Cuestiones relacionadas