Jul 022014
 
Artículo PHP

El formato CSV (“Comma Separated Values”) es utilizado con mucha frecuencia para importar y exportar datos de una hoja de cálculo o una base de datos.

En este artículo se explica la manera de trabajar con este formato en PHP

Variedades del formato CSV

Formato CSV “estandar”

Un fichero en formato CSV es un fichero de texto que contiene una serie de registros (normalmente, uno por línea). A su vez, cada registro consta de una serie de campos. Los valores de los distintos campos se encuentran uno tras otro en la misma línea, separados por un carácter delimitador que por defecto es una coma “,”.

Por otra parte, la primera línea del fichero suele contener los nombres de los campos, también separados por comas.

Ejemplo. El listado de empleados de una empresa podría haber sido exportado a un fichero CSV:

Otros caracteres separadores

Aunque CSV significa “valores separados por comas”, es habitual encontrar ficheros en los que los valores están separados por otro tipo de carácter separador, como puede ser un tabulador (“\t”) o un “pipe” (“|”).

Carácter contenedor de cadenas

Una cadena de caracteres podría contener el caracter delimitador. Por ejemplo, en el listado de empleados, el campo “nombre”podría contener los nombres completos de la forma apellidos, nombre. Para que la coma dentro del valor del campo nombre no se confunda con el caracter separador, se puede encerrar el valor completo entre dos caracteres contenedores. Habitualmente se utiliza el carácter (doble comilla) para este propósito. Ejemplo:

Como se ve, es posible prescindir del carácter contenedor si no es necesario.

Carácter de escape

Cuando se utilizan caracteres contenedores para encerrar el valor de un campo, puede darse el problema de que el propio valor del campo contenga en su interior el carácter contenedor (por ejemplo, el valor del campo “descripcion” del ejemplo podría ser programador “senior”

Este caso se trata poniendo un carácter llamado “carácter de escape” delante del carácter conflictivo. Habitualmente, se utiliza el carácter \ (backslash) o bien el propio carácter (comilla doble) como carácter de escape.

Ejemplo:

Valores multilínea

Puede darse el caso de que un valor conste de más de una línea. Esto no debe suponer un problema, si el valor está encerrado entre comillas, porque en este caso los caracteres de salto de línea que aparecen en su interior se consideran simplemente parte del valor.

Ejemplo:

En este ejemplo, el valor del campo descripcion del primer registro consta de tres líneas:

Cómo leer un fichero CSV en PHP

PHP implementa una función fgetcsv(), que permite interpretar adecuadamente los distintos tipos de ficheros CSV anteriormente expuestos.

La manera de leer con esta función un fichero “datos.csv” en formato CSV estandar es la siguiente:

 

El segundo argumento de fgetcsv es el número máximo de caracteres que puede haber en un registro. Se puede pasar el valor 0 (cero) para no establecer ningún límite, pero en este caso el rendimiento que se consigue es un poco menor.

Por otra parte, fgetcsv puede recibir argumentos adicionales para especificar el carácter separador, el carácter contenedor de cadenas, y el carácter de escape. Por ejemplo, la siguiente llamada:

permite leer un fichero CSV en donde el carácter separador es un tabulador (“\t”), el carácter contenedor de cadenas es la comilla simple (“‘”), y el carácter de escape es el “backslash”.

Cómo leer en PHP un fichero CSV con línea de cabecera

Si la primera línea del fichero contiene los nombres de los campos, podemos mejorar el código PHP del ejemplo, para que genere un array asociativo, en donde se puede hacer referencia a los valores de los campos por su nombre:

Indice de artículos sobre programación en PHP

 Publicado por en 3:41 pm

 Deja un comentario

(requerido)

(requerido)