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 Perl Discussion :

Aide sur les regexp


Sujet :

Langage Perl

  1. #1
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut Aide sur les regexp
    Bonjour,

    Je débute en perl et j'ai du mal avec les regexp...

    Voila j'ai un fichier texte tkprof et je voudrais, à partir de celui-ci, créer un autre fichier contenant que les données qui me seront utiles pour les passer dans un excel par exemple.

    Voici le début du fichier texte tkprof que je peux avoir en entrée :


    TKPROF: Release 9.2.0.1.0 - Production on Ve Mar 21 11:02:43 2008

    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

    Trace file: /save/udump/trace_helios3/ora03656.trc
    Sort options: default

    ********************************************************************************
    count = number of times OCI procedure was executed
    cpu = cpu time in seconds executing
    elapsed = elapsed time in seconds executing
    disk = number of physical reads of buffers from disk
    query = number of buffers gotten for consistent read
    current = number of buffers gotten in current mode (usually for update)
    rows = number of rows processed by the fetch or execute call
    ********************************************************************************

    alter session set nls_date_format = 'DD-MM-YYYY HH24:MI:SS'


    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 3 0.02 0.01 0 0 0 0
    Execute 3 0.00 0.00 0 0 0 0
    Fetch 0 0.00 0.00 0 0 0 0
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 6 0.02 0.01 0 0 0 0

    Misses in library cache during parse: 0
    Optimizer goal: CHOOSE
    Parsing user id: 57
    ********************************************************************************

    SELECT
    BO_MACRO_RAPPORT.NOM_RAPPORT
    FROM
    BO_MACRO_RAPPORT
    WHERE
    (
    BO_MACRO_RAPPORT.NOM_RAPPORT_PILOTE = 'PILOTE_EN_COURS_CLIENT'
    )

    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 4 0.14 0.15 0 0 0 0
    Execute 2 0.00 0.00 0 0 0 0
    Fetch 4 0.00 0.00 0 4 8 2
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 10 0.14 0.15 0 4 8 2

    Misses in library cache during parse: 0
    Optimizer goal: CHOOSE
    Parsing user id: 57
    ********************************************************************************


    Dans ce fichier apparait toutes les requêtes passées avec des stats. Le but serait de récupérer chaque requête (SELECT, INSERT, DELETE, ALTER, etc) et les stats concernant la colonne "elapsed" pour chacune d'entre elle.
    J'y suis arrivé avec un script ksh mais je pense que perl est plus adapté pour cela mais j'ai beaucoup de mal...

    On devrait obtenir ceci en sortie :

    SELECT * FROM SYS.SESSION_ROLES WHERE ROLE = 'DBA'
    ~0.27~0.00~0.00~0.27
    SELECT pc_user_def.password , pc_user_def.user_skey , pc_user_def.profile_skey , pc_user_def.first_name , pc_user_def.mi , pc_user_def.last_name , pc_user_def.active_ind FROM pc_user_def WHERE pc_user_def.user_id =:1
    ~0.47~0.00~0.00~0.47
    BEGIN HELIOS.SESSION_COMMENCER2( :0,:1,:2); END;
    ~0.03~0.73~0.00~0.76
    SELECT TLS.LOGIN_UTILISATEUR || ' / ' || VSS.TERMINAL FROM V_OSUSER2 VSS,SESSION_UTILISATEUR SSU,UTILISATEUR TLS WHERE SSU.SESSION_ID (+) = VSS.SID AND TLS.UTILISATEUR_ID (+) = SSU.UTILISATEUR_ID
    ~0.45~0.09~3.38~3.92

  2. #2
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    J'essayes de commencer par récupérer les différentes requetes pour les placer dans le fichier resultat.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $requetes = qw( select alter insert delete update begin overall );
     
    open (F,"$rep/ora03380.txt");
     
    open (Fsor,">$rep/resultat.txt");
     
    while (<F>){
    if ( /^$requetes/gi) {
            print Fsor $1;
        }
    }
    Mon fichier resultat.txt reste vide. De plus je ne penses pas pouvoir récupérer chaque requête entierement comme cela...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Bonjour,

    Voici un script qui devrait t'aider à démarrer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use strict;use warnings;
     
    local $/="\n\*\*\*\*\*\*\*\*";
     
    <>;<>; #saute les 2 premiers records qui ne sont pas intéressants
    while(<>){
       my ($query)= m/\n\s*\n(.*?)\n\s*\n/s;
       if ($query){
          print "=" x 70,"\n$query","\n";
          while (m/^(Parse|Execute|Fetch)\s+\S+\s+\S+\s+(\S+)/mg){
             print "$1(elapsed) => $2\n";
          }
       }
    }
    Ton premier problème est de lire le fichier par unité logique (une query avec ses infos). 'Le séparateur semble être une ligne de '*'. On fixe donc ici le séparateur de record en entrée à une suite de '*' en début de ligne.

    Ensuite, pour chaque record, on extrait les infos. La query est la première zone de texte qui est précédée d'une ligne blanche et suivie d'une ligne blanche. Etc.

    Ceci est un example ad-hoc et résistera assez mal à une modification du fichier de log. A toi de te demander quels sont les réels patterns sur lesquels se reposer. peut-on rencontrer d'autres lignes de '*', la colonne elapse risque elle de changer de place (il faudrait alors parser la ligne de titre pour la retrouver). Etc.
    La robustesse est une question récurrente avec les expressions régulières. Tu peux y répondre en connaissant parfaitement le format du fichier. Une stratégie que je recommande est de vérifier en plus que les données extraites sont cohérentes. par exemple que la query commence bien par un mot clé attendu, que elapse est bien un chiffre...

    Bon courage!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Salut!

    Tu peux aller voir ici aussi :
    http://www.developpez.net/forums/sho...d.php?t=506831

    C'est un topique où on à parlé de comment récupérer des informations sur un .log,
    Regarde tu verra c'est assez similaire à ton problème.

    J'espère t'aider un peu.
    A plus tard!

  5. #5
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    PerlPicker : Que représente exactement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    local $/="\n\*\*\*\*\*\*\*\*";
    C'est une sorte de variable qui contient le séparateur ******* ?
    Je ne connais pas cette forme : local $/

    kimous : merci je pense pouvoir m'inspirer de certaines choses en effet!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    En fait j'ai 'escapé' les * mais ce n'est pas nécessaire car ce n'est pas une expression régulière. Le code devrait donc être:

    $/ est une variable qui contient la chaine utilisée par Perl pour définir la séparation des lignes en lecture d'un fichier. c'est "\n" par défaut et il lit donc ligne par ligne.
    Ici on dit simplement de lire d'un coup tous les charactères jusquà trouver 8 * en début de ligne.
    local permet de limiter la modification de $/ au bloc (ici le script). C'est une bonne habitude qui évite des erreurs dans d'autres parties du code qui utiliseraient aussi $/ (modules, functions ...). C'est grosso modo comme my qui est interdit sur les variables globales.

  7. #7
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    D'accord merci pour cette explication!

    Il faut que je place une boucle foreach avec comme argument $/ après l'ouverture du fichier puis continuer sur ta boucle while?

    J'ai essayé plusieurs solutions mais le script tourne dans le vide sans rien affiché à chaque fois...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Désolé, ma réponse est un peu cryptique si tu es un débutant (et on l'a tous été!).
    Le script fonctionne sur l'entrée standard. Tu devrais voir le résultat avec la commande perl nomDuScript nomDuFichier.
    Il illustre la lecture de chaque enregistrement et la récupération de elapsed.
    Le voici modifié pour lire à partir d'un fichier

    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
    use strict;use warnings;
     
    local $/="\n********";
     
    my $nomFichier = $ARGV[0];
    open my $fh,"<","$nomFichier"
       or die "Unable to open file: $nomFichier ($!)";
     
    <$fh>;<$fh>;  # saute les 2 premiers records
    while(<$fh>){ # lecture enregistrement par enregistrement: Le résultat est dans $_ par défaut
       my ($query)= m/\n\s*\n(.*?)\n\s*\n/s; # le premier bloc de texte du record après une ligne 
       					 # blanche et suivi par une ligne blanche
       if ($query){
          print "=" x 70,"\n$query","\n";
          while (m/^(Parse|Execute|Fetch)\s+\S+\s+\S+\s+(\S+)/mg){
                    # $1 contient le nom de la mesure (Parse ou Execute ou Fetch)
                    # $2 contient le contenu de la 4ème colonne (elapsed)
             print "$1(elapsed) => $2\n";
          }
       }
    }
     
    close $fh;
    Il se lance par la même commande.
    J'ai ajouté quelques commentaires. Regarde la FAQ si tu ne comprends pas les expressions régulières. Regarde en particulier la signification des modificateurs /s /m et /g, ils sont très importants.
    Et n'hésite pas à revenir avec des questions précises.

    Bon courage

  9. #9
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Oui désolé j'ai encore du mal!

    Je te remercie pour tes précisions qui sont très claires!

    Néanmoins dans un premier temps tout me semble correct sauf la querry qui renvoie le chiffre 1 à chaque occurence trouvée :

    ======================================================================
    1
    Parse(elapsed) => 0.03
    Execute(elapsed) => 0.00
    Fetch(elapsed) => 0.00
    ======================================================================
    1
    Parse(elapsed) => 0.01
    Execute(elapsed) => 0.00
    Fetch(elapsed) => 0.00
    ======================================================================
    1
    Parse(elapsed) => 0.02
    Execute(elapsed) => 0.00
    Fetch(elapsed) => 0.00
    ======================================================================
    1
    Parse(elapsed) => 0.01
    Execute(elapsed) => 0.00
    Fetch(elapsed) => 0.00


    De plus j'essaye d'écrire le résultat dans un autre fichier mais je ne comprends pas car je ne peux pas utiliser la fonction open de la meme façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open my $fh,">","$result"
       or die "Unable to open file: $test ($!)";
    Ceci me retourne :

    Too many arguments for open at lecture line 9, near "or"
    Execution of lecture aborted due to compilation errors.


    Du coup j'ai trouvé ceci pour ouvrir un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FILE, $file) || die ("Erreur d'ouverture de FILE");
    Cela fonctionne mais quand je veux faire la même chose pour ouvrir le fichier dans lequel je veux écrire le résultat j'ai ca en erreur :

    Can't use an undefined value as filehandle reference at lecture line 7.

    Voici le script en entier :

    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
     
    #!/usr/bin/perl
     
    my $file = "/save/udump/ora03380.txt";
    my $test = "/save/udump/resultat.txt";
     
    open (FILE, $file) || die ("Erreur d'ouverture de FILE");
    open ($result, ">$test") || die ("Erreur d'ouverture de $test");
     
    local $/="\n********";
     
    <FILE>;<FILE>; #saute les 2 premiers records qui ne sont pas intéressants
    while (<FILE>) {
      my $query = m/\n\s*\n(.*?)\n\s*\n/s;
      if ($query){
        print "=" x 70,"\n$query","\n";
        while (m/^(Parse|Execute|Fetch)\s+\S+\s+\S+\s+(\S+)/mg){
          print $result "$1(elapsed) => $2\n";
        }
      }
    }
     
    close (FILE);
    close ($result);
    Je ne sais pas si cela provient de ma version de perl : 5.005_03...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Oui! Ca vient de ton perl qui est vieux. Je t'ai mis la construction recommandée avec un Perl récent (je te conseille de migrer si possible vers la 5.8).

    Avec les vieux Perl, les fichiers se gèrent comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ouverture en lecture
    open (FILE, "<$file") || die ("Erreur d'ouverture de $file ($!)");
    #ouverture en écriture
    open (FILEOUT, ">$test") || die ("Erreur d'ouverture de $test ($!)");
     
    ...
     
    print FILEOUT "blablabla ...";
    Pour le 1, tu as oublié les parenthèses qui permettent d'évaluer l'expression en contexte liste. Dans ce mode les valeurs matchées sont retournées. Sinon l'évaluation est faite en mode scalaire et l'expression retourne le nombre d'éléments de la liste (et donc 0 si ça ne matche pas)
    Tu dois faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my $query = m/\n\s*\n(.*?)\n\s*\n/s;

  11. #11
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Ok merci c'est bien ce que je pensais mais je ne sais pas encore si je peux upgrader la version de perl. Est-ce que cette "vieille gestion des fichiers" est toujours compatible avec les dernières versions de perl ou faut-il que je prévois de le réécrire si je suis sur un système plus récent?

    Sinon je ne comprend pas le coup des parenthèses dans l'expression régulière car tu as redonné exactement la même que j'avais.

    Je voudrais revenir sur cette regex pour être sur que j'ai bien compris : on cherche à trouver la requête après chaque séparateur ******** trouvé.

    donc :

    m// sert pour la correspondance du motif (je crois même que le "m" est inutile) où l'on place notre regex entre les //
    \n un retour chariot après le séparateur (ok)
    \s* un ou plusieurs espacement (cela représente la ligne vide après le séparateur? Il ne faut pas plutot utiliser \s*$ ?)
    \n un retour chariot après la ligne vide (ok)
    (.*?) représente une suite de caractères quelquonques à mémoriser donc notre requête
    \n un retour chariot après la requête (ok)
    \s* un ou plusieurs espacement (idem que précedemment)
    \n un retour chariot après la ligne vide (ok)
    s traiter la chaine comme une ligne simple (pourquoi pas)

    Désolé mais j'ai vraiment du mal avec ces regexp... et merci encore pour votre aide précieuse!

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Oups désolé. J'ai copié ton code sans le modifier

    Ce doit être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my ($query) = m/\n\s*\n(.*?)\n\s*\n/s;
    m// sert pour la correspondance du motif (je crois même que le "m" est inutile) où l'on place notre regex entre les //
    Exact mais il est nécessaire si tu utilises un autre délimiteur de motif que / ce qui est plus lisible si ton pattern contient des /. Je le mets systématiquement par habitude.
    \n un retour chariot après le séparateur (ok)
    \s* un ou plusieurs espacement (cela représente la ligne vide après le séparateur? Il ne faut pas plutot utiliser \s*$ ?)
    \n un retour chariot après la ligne vide (ok)
    Reconnait un passage à la ligne suivie de blancs optionnels puis un autre passage à la ligne. C'est donc une ligne blanche. Le $ n'est pas nécessaire et ne marcherait qu'avec le modificateur /m

    (.*?) représente une suite de caractères quelquonques à mémoriser donc notre requête
    \n un retour chariot après la requête (ok)
    \s* un ou plusieurs espacement (idem que précedemment)
    \n un retour chariot après la ligne vide (ok)
    s traiter la chaine comme une ligne simple (pourquoi pas)
    2 choses sont importantes ici:
    • le ? de (.*?) indique de prendre la chaîne minimale qui va matcher et non la maximale qui est le défaut en Perl. Si on ne fait pas ca, l'expression va tout prendre jusqu'à la dernière ligne blanche et non pas la première.

    • /s indique que . matche aussi une fin de ligne. L'expression va donc pouvoir prendre plusieurs lignes d'un coup. Par défaut (.*) s'arrête en fin de ligne.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Perl est très compatible ascendant. L'ancienne syntaxe reste valide et restera valide certainement très longtemps.
    La nouvelle est simplement plus propre en terme de scope du handler et plus sûre car le mode d'ouverture n'est plus dans le nom du fichier lui même mais à part.

  14. #14
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Merci beaucoup pour toutes ces précisions.

    Je voudrais ne pas tenir compte des 2 dernières requêtes qui commencent par overall qui sont en fait le résumé de toutes les requêtes passées (elles n'apparaissent qu'en fin de fichier).

    J'ai esayé ceci mais sans succes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while (<FILE>) {
      my ($query) = m/\n\s*\n(.*?)\n\s*\n/s;
      my $endquery = m/^overall/i;
      if ($query != $endquery){
        print FILEOUT "=" x 70,"\n$query","\n";
        while (m/^(Parse|Execute|Fetch)\s+\S+\s+\S+\s+(\S+)/mg){
          print FILEOUT "$1(elapsed) => $2\n";
        }
      }
    }

  15. #15
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Le fichier ce termine comme ceci et c'est cette partie dont je voudrais ne pas tenir compte :


    ********************************************************************************

    OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 89 3.24 3.83 0 0 0 0
    Execute 85 14.33 21.84 0 0 123 70
    Fetch 35 0.43 3.69 75 21887 168 2192
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 209 18.00 29.36 75 21887 291 2262

    Misses in library cache during parse: 3


    OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 239 6.66 8.17 0 0 0 0
    Execute 1559 0.79 0.89 2 56 2385 1281
    Fetch 1372 24.64 55.42 24775 1705976 4015 2365
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 3170 32.09 64.48 24777 1706032 6400 3646

    Misses in library cache during parse: 16

    211 user SQL statements in session.
    117 internal SQL statements in session.
    328 SQL statements in session.
    ********************************************************************************
    Trace file: /save/udump/traces/ora03380.trc
    Trace file compatibility: 8.00.04
    Sort options: default

    3 sessions in tracefile.
    446 user SQL statements in trace file.
    341 internal SQL statements in trace file.
    328 SQL statements in trace file.
    126 unique SQL statements in trace file.
    7993 lines in trace file.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Tu peux simplement faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($query !~ /^overall/i){
    ...
    }
    Je te conseille de t'aguerrir sur les expressions régulières en suivant le cours
    avec ses exercises ou la FAQ

  17. #17
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Merci je vais y jeter un oeil!

    Je viens de m'acheter un bouquin aussi ^^

  18. #18
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Tout fonctionne correctement à part pour certaines requêtes aléatoires où un caractère invisible se place juste après ces dernières ce qui donne une mauvaise sélection en sortie. Je dis invisible car je ne le vois pas en éditant le fichier en question, c'est en l'exportant sous un système linux que j'ai vu à quoi il ressemblait : ^@

    En fait il remplace la ligne vide entre la fin de la requête et le call et d'après moi c'est pour cela qu'il n'est pas pris en compte par la regex.

    Exemple de requête avec le caractère en question :

    ********************************************************************************

    BEGIN HELIOS.COMMANDE_FOURN_MODIF_LISTER2(:0,:1,:result_set); END;
    ^@
    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 5 0.06 0.06 0 0 0 0
    Execute 5 0.25 0.28 0 0 5 5
    Fetch 0 0.00 0.00 0 0 0 0
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 10 0.31 0.34 0 0 5 5

    Misses in library cache during parse: 1
    Optimizer goal: CHOOSE
    Parsing user id: 57
    ********************************************************************************


    Mon idée était de modifier la regex pour qu'elle sélectionne tout entre ***** et le call pour ne pas être embété par ce caractère bizarre mais je n'y parviens pas...

Discussions similaires

  1. Demande d'aide sur les regexp
    Par Uld dans le forum Langage
    Réponses: 1
    Dernier message: 18/08/2006, 22h15
  2. Aide sur les groupes (ADO)
    Par portu dans le forum QuickReport
    Réponses: 3
    Dernier message: 18/08/2004, 16h13
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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