我正在使用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