Come posso fare PHP fgetcsv () per riconoscere la (CR) carattere di nuova linea di Mac Classic?

StackOverflow https://stackoverflow.com/questions/4759880

  •  16-10-2019
  •  | 
  •  

Domanda

Io uso questo codice per ottenere il numero di colonne da un file CSV:

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

Funziona bene a meno che il file viene esportato con Excel per Mac 2011 dal momento che il carattere di nuova riga è quindi Mac Classic (CR) , che fgetcsv non riconosce.

alt text

Se manualmente modificare il ritorno a capo da Mac Classic (CR) per Unix (LR), allora funziona, ma ho bisogno di questo per essere automatizzato.

Come posso fare fgetcsv riconoscere il carattere di nuova linea di Mac Classic (CR)?

È stato utile?

Soluzione

Dal manuale :

Nota: Se il PHP non è propriamente riconoscere la fine riga quando lettura di file su o creati da un computer Macintosh, consentendo al auto_detect_line_endings run-tempo opzione di configurazione può contribuire a risolvere il problema.

Altri suggerimenti

Se la risposta di Saul non funziona, mi piacerebbe scrivere un semplice script per leggere nel file tutto in una volta e str_replace all \ r \ n, lo scarico i risultati in un nuovo file, quindi fgetcsv'ing che nuovo file .

Trovo divertente che questi termini vengono dai giorni di utilizzo di macchine da scrivere:
\ N = Line Feed (LF) - fa avanzare la carta di una riga
. \ R = Carriage Return (CR) -. Ritorna il carrello verso il lato sinistro della macchina da scrivere

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top