Traitement d'un CSV avant insertion SQL
Résolu
yann747
Messages postés
128
Statut
Membre
-
yann747 Messages postés 128 Statut Membre -
yann747 Messages postés 128 Statut Membre -
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.
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
-
plusieurs infos dans un "champs" c'est plus vraiment du csv ça.
tu peux toujours passer par du replace ... replace(laligne, '||', '";"') -
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