【发布时间】:2012-08-07 09:23:27
【问题描述】:
我正在使用 csv 解析器类 (http://code.google.com/p/php-csv-parser/) 来解析和提取 csv 文件中的数据。我遇到的问题是它仅适用于某些 csv 文件类型。 (Mac、Ms-Dos 和 Windows 似乎都有 csv 类型。)
如果我使用使用 csv - windows 选项保存在 mac(在 excel 中)上的 csv 文件,则该代码有效。但是,如果我将 Windows 机器上的文件简单地保存为 csv,那就行不通了。 (您会认为这与在 Mac 上保存 csv-windows 的格式相同。)如果我将其保存为 csv-MSDOS 文件,它确实可以在 Windows 机器上工作。这似乎有点荒谬。
有没有办法标准化这三种文件类型,以便我的代码可以读取上传的任何类型的 csv?
我想应该是这样的:
$standardizedCSV = preg_replace_all('/\r[^\n]/', '\r\n', $csvContent);
我知道这与每种文件类型处理行尾的方式有关,但我在试图找出这些差异时有点不耐烦。如果有人有任何建议,请告诉我。
谢谢。
更新: 这是我正在使用的 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。