Traitement d'un CSV avant insertion SQL

Résolu/Fermé
yann747 Messages postés 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 - 3 janv. 2012 à 04:04
yann747 Messages postés 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 - 4 janv. 2012 à 15:56
Bonjour à tous,
je souhaite traiter un fichier CSV que je souhaite inserer dans un base de données mysql.
il se présente sous la forme suivante:

Fichier CSV
"Auteur";"Filmographie" \retour ligne ... ainsi de suite...


Jusque là tout va bien, mais le problème que je rencontre
est que dans un même champs il y a plusieurs infos et en nombre variable...
Explication:

Structure du champs Filmographie:

[Titre du film]||[annee de tournage||[Type]
séparateur dans le champs: || (en nombre fixe)
Séparateur occurrence d'un item: ## (en nombre variable)

Exemple:
"Martin Scorsese";"Mad Max||1979||Action||Raging Bull||1980##1981||Drame||Cannonball||1975||Action##Comédie##Drame" \retour ligne

J'aurais aimé avoir ça sous une forme plus simple à traiter pour moi, du genre:

"Martin Scorsese";"Mad Max";"1979";"Action" \retour ligne
"Martin Scorsese";"Raging Bull";"1980-1981";"Drame" \retour ligne
"Martin Scorsese";"Cannonball";"1975";"Action-Comédie-Drame" \retour ligne

Peut-être avez-vous d'autres façons de faire à m'indiquer?
Merci d'avance de vos propositions.

2 réponses

l.dellacherie Messages postés 15 Date d'inscription mercredi 14 décembre 2011 Statut Membre Dernière intervention 3 janvier 2012 2
3 janv. 2012 à 21:59
plusieurs infos dans un "champs" c'est plus vraiment du csv ça.
tu peux toujours passer par du replace ... replace(laligne, '||', '";"')
0
yann747 Messages postés 128 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 13 octobre 2021 2
4 janv. 2012 à 15:56
oui je sais c'est pas trop pratique :-/
probleme résolu grace à zipe31 du forum linux
grace à la commande "sed.
voici le code:

s/||[^|]*//1  
s/\(## [^|]*|\)|[^|]*|/\1/g  
s/||/";"/g   
s/ ## /"\n"/g    
s/\([^;]*;[^;]*;\)\([^\n]*\n\)\(.*\)/\1\2\1\3/   
P   
D
0