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

Langage PHP Discussion :

Petit défi d'expressions régulières [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut Petit défi d'expressions régulières
    Salut,

    Pour l'exportation en sql, j'aurais besoin de transformer une base de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <citation>
    abaissable|1
    (Adjectif)|abattable|inclinable</citation>
    En ce format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <code type="sql">INSERT INTO `dico` VALUES ('abaissable','abattable,inclinable');</code>
    mais ça me semble compliqué

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait que tu décrives en français ton schéma de départ.

    Par exemple est-ce qu'il y a toujours deux synonymes ? parfois un ? jamais plus de deux ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    Je ne savais pas que ça changeait quelque chose, merci de demander.

    Il peut y avoir plusieurs synonymes, parfois qu'un :
    à|1
    (Preposition)|chez|dans|parmi
    abaca|1
    (Nom)|chanvre|chènevière|filasse|jute
    abaissable|1
    (Adjectif)|abattable|inclinable
    abaissant|1
    (Adjectif)|avilissant|humiliant|mortifiant|dégradant|vexant|honteux|écrasant|blessant
    abaissé|1
    (Adjectif)|avili|rabaissé|déconsidéré|diminué|déchu|disqualifié|discrédité|dévalorisé|dévalué
    abaisse-langue|1
    (Nom)|spatule|manche
    C'est chaud

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En filoutant sur le remplacement des pipes par des virgules ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo substr("INSERT INTO `dico` VALUES " . str_replace("|", ",", preg_replace ("#(.*)\|1\r\n\(.*\)\|(.*)(\r\n|$)#U", "('\\1','\\2'), ", $input)),0, -2);
    Il doit bien y avoir manière de faire seulement avec l'expression régulière mais ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    xD ça fonctionne, merci beaucoup ! Troppp fort syntaxe parfaite et tout et tout !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `dico` VALUES ('à','chez,dans,parmi'), ('abaca','chanvre,chènevière,filasse,jute'), ('abaissable','abattable,inclinable'), ('abaissant','avilissant,humiliant,mortifiant,dégradant,vexant,honteux,écrasant,blessant'), ('abaissé','avili,rabaissé,déconsidéré,diminué,déchu,disqualifié,discrédité,dévalorisé,dévalué'), ('abaisse-langue','spatule,manche')

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    Par contre je me tape une erreur de syntaxe que je n'arrive pas à localiser !

    ERROR 2006 (HY000) at line 6132: MySQL server has gone away
    Je suis sûr que ce n'est pas un timeout car mon MySQL est bien réglé et que j'ai déjà uploadé des bases de la même taille. Ca bloque toujours sur la même ligne (à savoir INSERT INTO `dico` VALUES)

    J'ai viré les ', y'a pas de "...

    Je trouve pas.

    Trouvé.

    J'ai un autre problème, à certains endroits la syntaxe était différente et du coup ça donne

    ('mobile','agile,vif'), (Nom),intention,préméditation ('mobilier','ameublement,aménagement
    Tu saurais comment enlever les textes en rouge ? Je pense que supprimer entre ') et (' puis remettre la virgule ça marcherait

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut enlever tout le texte en rouge.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut


    Il y en a un peu partout

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Donne moi le passage de la source ou il y a "...(Nom)|intention|préméditation...".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    Ca serait possible de les supprimer après le premier formatage, car j'aimerais les supprimer de toute manière ?

    Si oui, la source est :

    ('mobile','agile,vif'), (Nom),intention,préméditation ('mobilier','ameublement,aménagement)

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non les données de départ.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    Ok, alors en fait, ce problème se produit quand il y a plusieurs définitions :

    mode|1
    (Nom)|actualité|événements|nouveauté
    (Nom)|façon|habitude|coutume
    (Nom)|méthode|logique|procédé
    Ton code aurait fonctionné s'il y avait eu une seule ligne "(Nom)"

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu vas avoir besoin de faire cette opération regulièrement ou bien uniquement ponctuellement ?
    Si c'est ponctuellement, on peut prévoir un script pas forcemment très élégant mais facile à écrire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    C'est uniquement pour cette fois

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    J'ai mal répondu ?

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Disons que tu mets ta source dans un fichier "file.txt".
    Je n'ai pas testé et il faudra retirer la dernière virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    echo 'INSERT INTO `dico` VALUES ';
    $handle = fopen('file.txt', 'r');
    if ($handle)
    {
        while (!feof($handle))
    	{
    		$ligne = fgets($handle);
                    $parts = explode("|", $ligne);
                    if ($ligne[1] == "1") {
                         $mot = $ligne[0];
                    }
                    else {
                         unset($ligne[0]);
                         $synonymes = implode(",", $ligne);
                         echo '("' . $mot . '","' . $synonymes . '"), '; 
                    }
    	}
    	fclose($handle);
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    Aie ça marche pas.

    INSERT INTO `dico` VALUES
    ( ! ) Fatal error: Cannot unset string offsets in D:\wamp2\www\test3\index.php on line 14
    Call Stack
    # Time Memory Function Location
    1 0.0001 687144 {main}( ) ..\index.php:0
    Ligne concernée :

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca marchait hier et ça ne marche plus ce matin ?

    Sinon j'ai réflechi pendant la nuit : autant executer les requêtes au fur et à mesure (ici j'ai utilisé une requête préparé en PDO mais on peut faire de façon plus préhistorique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    $sth = $cnx->prepare("INSERT INTO `dico` VALUES (:nom, :synonymes);");
    $handle = fopen('file.txt', 'r');
    if ($handle)
    {
        while (!feof($handle))
    	{
    		$ligne = fgets($handle);
                    $parts = explode("|", $ligne);
                    if (!empty($ligne)) {
                    if ($ligne[1] == "1") {
                         $mot = $ligne[0];
     
                    }
                    else {
                         unset($ligne[0]);
                         $synonymes = implode(",", $ligne);
                         echo $mot . ' : ' . $synonymes . '<br/>';
                         $sth->execute(array(':mot'=>$mot, ':synonymes'=>$synonymes));
                     }
                     }
    	}
    	fclose($handle);
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Points : 0
    Points
    0
    Par défaut
    En fait hier ça ne marchait pas non plus, comme un idiot j'avais lancé l'ancien code, avant de passer la nuit à chercher pourquoi l'import sql ne marchait toujours pas...

    Ce nouveau code donne :

  20. #20
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour le coup la ce n'était pas clef en main, mais bon il manque juste la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cnx = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [RegEx] Petite broutille sur expressions régulières
    Par Sanceray3 dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2009, 15h00
  2. [RegEx] Petite vérification d'expression régulière
    Par psychoBob dans le forum Langage
    Réponses: 23
    Dernier message: 04/06/2006, 22h28
  3. petit problème d'expression régulière
    Par stoyak dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 12h20
  4. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 11h33
  5. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 21h48

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