2010-07-29 4 views
0

J'ai un fichier CSV dans ce ci-dessous le formatRegEx - Java de Split fichier csv Parsing Commande

11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,[email protected],Capital,NEW 

Regarding Java Split Command Parsing Csv File

Dans ce lien Byers et @R @ Mark. Bemrose suggéré String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1); Mais si vous remarquez attentivement dans le CSV ci-dessus, vous trouverez un nom avec "O'Horner, James" qui cause des problèmes et son lancement ORA-0917: missing comma erreur. Y at-il un moyen de l'éviter ou le reg-ex doit être corrigé?

Kinda confus: -o

Répondre

2

caveat: toutes les conditions suivantes est la spéculation et devinettes ralenti, comme vous ne l'avez pas fourni de code pour la vérification, et mon Palantir est dans l'atelier pour la maintenance préventive. Mot de passe: Vous ne rencontrez pas de problème avec le "Lefoullon,Paris" plus tôt, mais vous avez un problème avec "O'Horner, James" ... cela suggère que l'apostrophe est probablement la cause (innocente) du problème. Hypothèse: Le champ est extrait avec succès du fichier CSV sous la forme O'Horner, James ... Notez que l'apostrophe n'est PAS spéciale à CSV (et ne se produit pas dans cette magnifique [voir note] regex).

Cependant l'l'apostrophe est significative pour SQL; les apostrophes citent les littéraux de chaînes dans SQL, et les apostrophes dans les données doivent être doublées.

Comme ceci: INSERT INTO ..... VALUES(...,'O''Horner, James', ...);

Si vous utilisez la substitution de paramètres dans votre interface SQL (comme vous devriez être), la conversion de vos champs de données en constantes SQL valides sera fait pour vous. Dans le cas contraire

  • écrire du code pour fixer chaque champ de chaîne (remplacer toutes les occurrences de ' par '' puis enveloppez le résultat dans ' avant et arrière)

  • google ("injection SQL"), lire, se repentir, et réécrire votre code en utilisant la substitution


paramètre note: "magnifique" comme dans «C'est magnifique, cé pas de Mais Ne est la guerre ". Utilisez un analyseur CSV, pour des raisons de santé mentale.

+0

Incroyable !!!! Merci John – Sandeep