0

wvb アプリのユーザーが CSV ファイルを使用してデータを一括アップロードできるようにする機能を追加しようとしています。データの実際のフィールド自体にカンマが含まれている場合を除いて、すべてうまく機能します。

これに関する多くの投稿があり、主にコンマを二重引用符で囲むことで対処する多くの方法を読みましたが、コードでこれを行う方法がわかりません。

最終的に、ユーザーが入力時にこれを行うことに頼ることはできないため、データベースにヒットする前にアップロードプロセスの一部として行う必要があります - タブを代替セパレーターとして使用しようとしましたが、Excel はその方法に非常に一貫性がないようですタブ区切りを処理するので、除外しました。

(sanitiseData は、すべてのユーザー入力データを消去するためにサイト全体で使用する関数です)

        $handle = fopen($file_path, 'r');  
        $row_count=0;

        while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {  
            if ($row_count==0) { 
                $row_count++;
                } else {
                    $row_count++;
                    $works_id = sanitiseData($data[0]);
                    $title = sanitiseData($data[1]);
                    $first_name = sanitiseData($data[2]);

                    //Use data to insert into db  
                    $sql = mysql_query("INSERT INTO csv_employee_personal (id,works_id,title,first_name) VALUES ('','$works_id','$title','$first_name')");
                }
        }  

        //delete csv file  
        unlink($file_path);  
4

1 に答える 1

1

これは、データが「data」、「data2」、「data3、およびその他」、「data4」のように見えるものであると推測しています

私の正規表現は非常に悪いですが、それが最善の解決策だと思います。

その間、行の各文字を再帰的に調べて、コンマとフィールド区切り文字を追跡し、最後に " が続かないコンマを見ていることに気付いたら、それをエスケープできます。

私が提供したサンプルデータがあなたのデータと一致する場合は、コンマをエスケープする関数を作成するまで数分待ってください

于 2012-07-19T20:45:37.320 に答える