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

SQL Oracle Discussion :

Tronquer une chaine à partir d'un caractère


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Tronquer une chaine à partir d'un caractère
    bonjour à tous,

    après deux jours de recherches infructueuses sur les forums et sur le net je viens exposer mon problème.

    je dois exporter en CSV mes sources provenant de ma BDD XE; jusque là pas de problèmes. Sauf que mon chef veux que je vire les commentaires. Je dois alors trouver dans le texte de mes sources les '--', les '/*' et les '*/', et les supprimer ainsi que les commentaires qui suivent.

    je débute en sql et après avoir essayer de manipuler INSTR,TRIM et autre SUBSTR je suis perdu.

    merci de votre aide

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tout dépend de comment sont stockés ces commentaires. Un -- met la suite de la ligne en commentaire. Pour les /* ... */, ils peuvent se mettre sur plusieurs lignes

    Tu peux utiliser REGEXP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT src, REGEXP_REPLACE(src, '\/\*(.*)\*\/', '<commentaire>') sans_comment
    FROM 
    (SELECT 'adhjazdgyazg/*dzsidjzidjkz*/cdfhfudhfu' src FROM dual)
     
    SRC	SANS_COMMENT
    adhjazdgyazg/*dzsidjzidjkz*/cdfhfudhfu	adhjazdgyazg<commentaire>cdfhfudhfu

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    bonjour,

    tout d'abord un grand merci à toi. j'ai testé ta solution et ça fonctionne plutôt bien. Cependant j'ai un encore un petit soucis. Dans ton code il manque les '--'. j'ai donc essayer de les rajouter mais il n'y a aucun résultat. en manipulant un peu j'ai donc ceci qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  REGEXP_REPLACE(TEXT, '--' , '<commentaire>') 
    FROM 
    (SELECT TEXT
            FROM ALL_SOURCE
            WHERE NAME LIKE 'XX%');
    Maintenant j'aimerai y intégrer '/*' et '*/'. Mais je ne sais pas comment faire. en cherchant j'ai trouver un truc du style [--/**/], mais quand je lance ma requête
    le '<commentaire>' sort en double dans ma chaine de caracteres.

    ????

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Avec la vue All_source, le problème pourrait être simple pour les --
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NAME, TYPE, line, text, DECODE(INSTR(TEXT, '--'), 0,text, SUBSTR(text, 1, INSTR(TEXT, '--')-1)) text_sans_comment
    FROM ALL_SOURCE
    Mais tu peux avoir le problème de -- dans une chaine de caractère... et dans ce cas là, il ne faut pas le considérer comme un commentaire. Ca devient de l'analyse syntaxique, c'est beaucoup plus compliqué.

    Pour les /* */.. pareil, le début /* peut commencer à la ligne 10 et finir */ à la ligne 150, donc pas possible en requête simple.

    Il faut donc scripter, et boucler sur toutes les lignes dans l'ordre et supprimer les infos au fur et à mesure de la lecture.

    En gros un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FOR r IN (SELECT NAME, TYPE, line, text FROM ALL_SOURCE WHERE owner = USER ORDER BY NAME, TYPE, line)
    LOOP
     1/ RAZ des variables si changement de procédure
     2/ Est-ce que je suis après un /* => vérifier si un */ existe 
     3/ Est-ce qu'il y a un début de -- qui n'est pas dans une chaine de caractère (faut compter le nombre de ' )
     Epurer la ligne de text s'il le faut
    END LOOP;

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    oula un peu trop compliqué pour une débutant comme je suis !

    mais merci quand même de ta réponse

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/03/2010, 14h50
  2. [VBA] Récupération d'une chaine à partir d'un caractère spécifié
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/06/2008, 17h57
  3. Tronquer une chaine de caractère
    Par Maluje dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2008, 17h18
  4. Tronquer une chaine de caractères
    Par Tsuna78 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/07/2007, 12h15
  5. [RegEx] Tronquer une chaine de caractère sauf si c'est une URL.
    Par psychoBob dans le forum Langage
    Réponses: 16
    Dernier message: 03/06/2006, 12h01

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