0

オンラインで見つけたいくつかの 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);
}
4

1 に答える 1