我正在使用csv解析器類(http://code.google.com/p/php-csv-parser/)解析並從csv文件中提取數據。我遇到的問題是它只適用於某些csv文件類型。 (似乎有一個csv類型的Mac,爲Ms-Dos和Windows。)標準化CSV文件類型
如果我使用csv文件保存在Mac(在Excel中)使用CSV - 窗口選項。但是,如果我將文件保存在Windows計算機上,就像csv一樣,那不起作用。 (你可能會認爲這與在Mac上保存csv-windows的格式相同。)如果我將它保存爲csv-MSDOS文件,它可以在Windows機器上運行。這似乎有點荒謬。
有沒有一種方法來標準化這三種文件類型,以便我的代碼可以讀取上傳的任何類型的csv?
我想它會是這樣的:
$standardizedCSV = preg_replace_all('/\r[^\n]/', '\r\n', $csvContent);
我知道它是與每個文件類型如何處理行的結束,但我有點放出來試圖圖那些差異。如果有人有任何建議,請告訴我。
謝謝。
UPDATE: 這是我使用的CSV解析器的相關代碼,由行中提取數據行:
$c = 0;
$d = $this->settings['delimiter'];
$e = $this->settings['escape'];
$l = $this->settings['length'];
$res = fopen($this->_filename, 'r');
while ($keys = fgetcsv($res, $l, $d, $e)) {
if ($c == 0) {
$this->headers = $keys;
} else {
array_push($this->rows, $keys);
}
$C++;
}
我想我需要了解fgetcsv如何處理EOL的,這樣我可以做確保任何格式的csv文件都以相同的方式處理。
更新我將csv解析器中的相關代碼添加到原始文章中,以便您可以看到它如何處理EOL。 – user1383418 2012-08-10 04:57:00