オンラインで見つけたいくつかの CSV ファイルに対して正常に動作する CSV パーサーを作成しましたが、Microsoft Excel 2011 を介して XLS から CSV に変換したパーサーは動作しません。機能するものは、次のようにフォーマットされています。
「ソート順」、「一般名」、「正式名称」、「タイプ」、「サブタイプ」、「主権」、「資本」、「ISO 4217 通貨コード」、「ISO 4217 通貨名」、「ITU-T」電話コード」、「ISO 3166-1 2 文字コード」、「ISO 3166-1 3 文字コード」、「ISO 3166-1 番号」、「IANA 国コード TLD」「1」、「アフガニスタン」、「イスラム国」アフガニスタン","独立国家",,,"カブール","AFN","アフガニ","+93","AF","AFG","004",".af"...... ..................等...
機能しないものは、次のようにフォーマットされています。
注文ID,注文日,返品日,製品ID,説明,注文理由コード,返品数量,注文返品コメント,出荷先名,出荷先住所1,出荷先住所2,出荷先住所3,出荷先都市,出荷先州,出荷郵便番号へ、国への発送、処分、メールへの発送、ShipVia 5555555,2013-07-05 13:58:36.000,2013-08-16 00:00:00.000,5555-55,0555 - 一部のテスト項目、返金、 2,,jeric Beatty,123 fake st,,,burke,NJ,55055,US,Discard,test@test.com,超速配送
とにかく、Excel を最初の形式でエクスポートする方法はありますか? ファイルが巨大で、「すべてを置き換える」ことができない多くの部分を手動で編集する必要があるため、これを手動で行うことは避けたいと思います。もう 1 つの問題は、いくつかの場所に 2 つ、場合によっては 3 つのカンマがあることです。これは両方のファイルに表示されますが。
パーサーは次のとおりです。
function ingest_csv() {
$file_url = 'http://www.path.to/csv/file.csv';
$record_num = 0;
$records = array();
$header = array();
if (($handle = fopen($file_url, "r")) !== FALSE) {
$records['id'] = '';
while (($data = fgetcsv($handle)) !== FALSE) {
$records['id'][$record_num] = '';
$cell_num = 0;
foreach ($data as $cell) {
if($record_num == 0) {
$header = $data;
} else {
$current_key = $header[$cell_num];
$records['id'][$record_num][$current_key] = $cell;
}
$cell_num++;
}
$record_num++;
}
fclose($handle);
}
else {
echo 'could not open file.';
}
return array($record_num, $records);
}
function batch_csv() {
list($num_rows, $rows) = ingest_csv
print_r($num_rows);
print_r($rows);
}