2011-01-21 43 views
7

que utiliza este código para obtener el número de columnas de un archivo CSV:¿Cómo puedo hacer que fgetcsv() de PHP reconozca el nuevo carácter de línea Classic Mac (CR)?

$this->dummy_file_handler = fopen($this->config['file'],'r'); 
if ($dataset =fgetcsv($this->dummy_file_handler)) 
{ 
    $this->number_of_columns = count($dataset); 
} 

Funciona bien menos el archivo se exporta con Excel 2011 para Mac ya que el carácter de nueva línea es entonces Classic Mac (CR) que fgetcsv no reconoce.

alt text

Si manualmente cambio la nueva línea de Classic Mac (CR) para Unix (LR), entonces funciona, pero necesito que esto puede automatizar.

¿Cómo puedo hacer que fgetcsv reconozca el nuevo carácter de línea de Mac clásico (CR)?

Respuesta

18

Desde el manual:

Nota: No Si PHP está correctamente reconociendo los finales de línea cuando lectura de archivos ya sea dentro o creado por un ordenador Macintosh, permitiendo a los auto_detect_line_endings configuración la opción puede ayudar a resolver el problema.

+1

+1 Me pegó con unos 40 segundos. –

1

Si la respuesta de Saul no funciona, escribo un script simple para leer en el archivo de una vez y str_replace all \ con \ n, volcando los resultados en un nuevo archivo, luego fgetcsv'ing ese nuevo archivo.

Me parece divertido que estos términos vengan de la época del uso de máquinas de escribir:
\ n = Line Feed (LF) - avanza el papel una línea.
\ r = Retorno de carro (CR) - devuelve el carro al lado izquierdo de la máquina de escribir.

Cuestiones relacionadas