2010-07-12 9 views
2

J'essaye d'analyser un fichier .csv dans une base de données MySQL, et ce n'est pas amusant.Problème d'analyse CSV vers MYSQL

Certaines lignes ressemblent à ceci:

"Valeur", valeur "Value3", "la valeur, la valeur"

Et certains ressemblent à ceci:

valeur, valeur, valeur ,, valeur

Cette preg_split a bien fonctionné, sauf pour les champs qui étaient vides:

foreach ($row as $item) { 
    $item = preg_split("/[,]*\\\"([^\\\"]+)\\\"[,]*|[,]+/", $item, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); 
} 

Lorsque j'ai supprimé "PREG_SPLIT_NO_EMPTY", j'ai ajouté une valeur vide supplémentaire à la fin de $ item. Existe-t-il une expression regex qui fonctionnerait pour cela?

+0

Vous pourriez être en mesure de rendre votre vie plus facile en utilisant les fonctionnalités existantes dans MySQL, comme Load Data Infile: http://dev.mysql.com/doc/refman/5.1/en/load-data.html –

Répondre

8

Pourquoi ne pas utiliser LOAD DATA INFILE

Vous pouvez également utiliser PHP construit dans fgetcsv() ou str_getcsv() fonctions plutôt que de bricoler avec des expressions régulières essayer de réinventer la roue

+2

+1. N'écrivez pas votre propre analyseur CSV. C'est plus difficile que tu ne le penses. Vous vous tromperez. – bobince