IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Éditer un fichier


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Par défaut [SQL] Éditer un fichier
    Bonjour à tous,

    je suis en train de transformer un fichier xml en sql avec des expressions régulières en php.


    mon fichier sql se trouve composé de lignes sous cette forme:

    insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');

    seulement j'ai des lignes qui n'ont pas d'auteur et je me retrouve avec :

    Insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1996 ','français','L''acte de vente ','CD ROM',' / Université Blaise Pascal, Clermont 2');

    donc avec un champs de moins.

    Comment faire pour compter les ',' dans chaque ligne et si il m'en manque rajouter ,'' à la fin de la ligne?

    j'ai bien essayé des choses comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $contents = ereg_replace('(values[(|)\'[:space:]]*)(([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')
    (([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)
    (\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)([(|);]*)','\\0\\1\\2\\3\\4\\5\\6\\7\\8\\9,\'\');',$contents);
    mais sans succès...

    merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    J'aurais fait ça avec une function de callback en détectant si auteur est présent dans la liste des colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function modInsert($masque)
    {
       if( !strpos($masque[1], 'auteur') )
       {
          $masque[1] .= ', auteur';
          $masque[2] .= ', \'\'';
       }
       return 'INSERT INTO OUVRAGE(' . $masque[1] . ') VALUES(' . $masque[2] . ');';
    }
     
    $insert = array("insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');",
    "insert into ouvrage (annee, langue, titre, support, titre2) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');");
     
    $insert = preg_replace_callback('#^insert\s+into\s+ouvrage\s*\(([^\)]+)\)\s*values\s*\((.+)\);$#i', 'modInsert', $insert);

  3. #3
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Tu peux compter en faisant ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    preg_match_all('#\([^)]+\)#', $requete, $matches);
     
    $nombre_parametres_1 = count( explode(',', $matches[1]) );
    $nombre_parametres_2 = count( explode(',', $matches[2]) );
     
    if( $nombre_parametres_1 > $nombre_parametres_2 )
    {
        echo('Il faut rajouter un champ');
    }
    pour ajouter un champ, je te conseil un str_replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_replace(');', ', \'\');', $requete);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Requête SQL sur un fichier excel ?
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2006, 23h06
  2. sql loader et fichier paramètre dynamique
    Par ade05fr dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 13/01/2006, 14h54
  3. [Cygwin] : comment éditer un fichier texte ?
    Par Invité dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 13/12/2005, 21h43
  4. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01
  5. Réponses: 2
    Dernier message: 09/12/2005, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo