2013-04-26 83 views
1

我有一個基本的csv文件讀取,但它無法讀取保存在Mac平臺上的csv。Mac和Win之間的CSV讀取問題 - 丟失 n char

我明白問題是從Different operating system families have different line-ending conventions,但我無法修復它。

我發現了一個建議 - 以二進制模式打開文件,但沒有奏效。

的代碼非常簡單:

file opening

$this->fileHandler = fopen($this->filename, 'rb'); 

read line

$columns = fgetcsv(
    $this->fileHandler, 
    $this->length, 
    $this->delimiter, 
    $this->enclosure 
); 

我已經打開用記事本兩個文件++和它似乎是Mac文件缺少\n字符在行末,但\r在那裏。

回答

3

設置auto_detect_line_endings選項true使用fgetcsv()前:

ini_set("auto_detect_line_endings", true); 
// rest of your code 
+0

完美的作品...謝謝 – 2013-04-26 15:45:03

+0

歡迎:) – 2013-04-26 16:56:32

+0

這是一個很好的答案。它救了我。 – 2015-02-11 08:42:59

0

我不知道這是否適用於Mac,但我知道,當將文本文件從Windows移動到某些Linux版本時,我可以在該文件上運行dos2unix filename命令,它將修復我的格式。也許Mac有類似的功能?

編輯:也許這可以幫助:http://schmeits.wordpress.com/2010/08/26/dos2unix-alternative-those-darn-m-characters/

+0

即使這將是一個解決方案,我不想premanipulate的文件或以任何方式改變它...謝謝---我可以只是手動插入所有的'\ n'旁邊的'\ r'字符,但似乎非常低效 – 2013-04-26 15:20:19

+0

你是說你不想「premanipulate 「文件,但你願意手動添加新行字符? – 2013-04-26 15:22:48

+0

我可能一直不清楚,我可以替換,但我不想...似乎很昂貴的無用代碼。 – 2013-04-26 15:24:20