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 マシンから動作します。これは少しばかげているようです。
これら 3 つのファイル タイプを標準化して、アップロードされた任意のタイプの 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 ファイルも同じ方法で処理されるようになります。