Traitement d'un CSV avant insertion SQL

Résolu
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.

2 réponses

  1. l.dellacherie Messages postés 15 Statut Membre 2
     
    plusieurs infos dans un "champs" c'est plus vraiment du csv ça.
    tu peux toujours passer par du replace ... replace(laligne, '||', '";"')
    0
  2. yann747 Messages postés 128 Statut Membre 2
     
    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