2011-06-13 46 views
11

¿Cómo importo archivos CSV usando zend framework? ¿Debería usar zend_file_transfer o hay alguna clase especial en la que tenga que investigar? Además, si uso zend_file_transfer, ¿hay algún validador especial para CSV?cómo importar CSV usando zend

+3

Por lo que yo sé, no hay ninguna clase de analizar CSV en Zend (a menos que usted está mirando para analizar un archivo de traducción con o Zend_Translate si estás usando Zend_Auth con archivos CSV). Es bastante sencillo con 'fgetcsv', así que supongo que no hay necesidad de una clase allí. – netcoder

+0

@netcoder ¡De acuerdo! Muchas gracias – JABD

Respuesta

12

usted no tiene que utilizar ninguna biblioteca Zend para importar archivos CSV, sólo puede utilizar las funciones nativas de PHP, echar un vistazo a fgetcsv

$row = 1; 
if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
    } 
    fclose($handle); 
} 
+2

Advertencia lateral: 'fgetcsv()' no es realmente compatible con Unicode, por lo que es posible que necesite hacer malabares con las configuraciones regionales. – Darien

+0

sí, sé cómo hacerlo usando fgetcsv, pero estoy específicamente interesado a través de zend. Gracias por su respuesta de todos modos. – JABD

+0

Las funciones CSV incorporadas son defectuosas y con errores. Es una pesadilla intentar analizar CSV en PHP nativo. –

1

Actualmente no existe una manera de hacer esto con el Zend Marco de referencia. ¿Cómo puede uno estar seguro?

Por ejemplo, Zend_Translate apoya traducción de archivos CSV, pero si marca el código de la fuente del adaptador de red correspondiente (Zend_Translate_Adapter_Csv), se puede verificar que utiliza fgetcsv, y no una clase específica de Zend. Además, este adaptador CSV viene con la siguiente advertencia:

Nota: Tenga en cuenta que el adaptador tiene Csv problemas cuando sus archivos CSV son codificado de manera diferente a la configuración local de su entorno. Esto es debido a un error de PHP en sí que no será reparado antes de PHP 6.0 (http://bugs.php.net/bug.php?id=38471). Por lo tanto, debe tener en cuenta que el adaptador Csv debido a restricciones PHP no es consciente de la configuración regional.

que está relacionado con los problemas de la función fgetcsv.

0

Aquí hay una función que lee un archivo csv y devuelve una matriz de elementos que contienen los dos primeros valores de datos de columna.

Esta función podría leer un archivo de first_name, last_name por ejemplo.

function processFile ($filename) { 
    $rtn = array(); 

    if (($handle = fopen($filename, "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $item = array(); 
      $item[] = $data[0]; 
      $item[] = $data[1]; 
      $rtn[] = $item; 
     } 
    } 
    return $rtn; 
} 
8

También puede usar SplFileObject para leer archivos CSV.

Desde el manual de PHP:

<?php 
    $file = new SplFileObject("animals.csv"); 
    $file->setFlags(SplFileObject::READ_CSV); 
    foreach ($file as $row) { 
     list($animal, $class, $legs) = $row; 
     printf("A %s is a %s with %d legs\n", $animal, $class, $legs); 
    } 
?> 

http://php.net/manual/en/splfileobject.fgetcsv.php

+0

SplFileObject no proporciona ninguna validación/error útil: pasar basura generará que $ row sea una matriz de un elemento donde el elemento es toda la línea. –

Cuestiones relacionadas