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 :

Conversion Shell en perl


Sujet :

Langage Perl

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Par défaut Conversion Shell en perl
    Bonjour,

    J'essai en vain de traduire mon script shell en script perl pourriez vous m'aider?

    Mon script est assez simple dans son fonctionnement.
    J'ai un fichier contenant des nom de repertoireet d'application séparé par ":" (première boucle for)
    La deuxième boucle li un fichier dictionnaire qui contient les motifs a rechercher dans le grep.

    Ensuite j'ecrit simplement la valeur de mes variables dans un fichier texte classique (3ème boucle).

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/bin/sh
    
    PATH_SCRIPT=~/kg_test
    PATH_FILE_DEST=/dlagc/export/kg_recensement/
    
    echo "SET DEFINE OFF;">$PATH_FILE_DEST/sql_table_export.sql
    echo "CREATE TABLE DDL_TABLE_RECENSEMENT ("TABLE_NAME" VARCHAR2(100 BYTE), "TYPE" VARCHAR2(100 BYTE), "APPLI" VARCHAR2(100 BYTE), "SOURCE" VARCHAR2(100 BYTE));">>$PATH_FILE_DEST/sql_table_export.sql
    
    # sed dans la fonction permet d'eviter les probleme cause par les nom de fichier avec des espaces
    # ou des apostrophes
    
    recherche ()
    {
     for rep in `cat $PATH_SCRIPT/$1`; do
    
      apps=`echo $rep|cut -f2 -d:`
      rep=`echo $rep|cut -f1 -d:`
    
      cd $rep
    
        for name in `cat $PATH_SCRIPT/dico_table.txt`; do
    
          for file in `grep -i $name *|cut -f1 -d:|sed s/"\ "/"@"/g|sed s/"\'"/"\'\'"/g`; do
    
           file2=`echo $file|sed s/"@"/"\ "/g` #astuce pour contourner le problème des espaces en shell
    
           echo "Insert Into DDL_TABLE_RECENSEMENT (table_name, type, appli, source) Values ('$name','$type','$apps','$file2');">>$PATH_FILE_DEST/sql_table_export.sql
    
          done
    
        done
    
    done
     
    }
    
    echo "################# Forms Oracle #################"
    
    type=Oracle_Forms
    recherche rep_forms.txt #fichier texte de la forme /rep/:Appli
    
    Je pense que le perl devrait fournir de bien meilleur performances?

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Bonjour,

    Pour la conversion, et bien utilise les fonctions basiques de perl....
    (Echo --> print...).

    les for ont une autre syntaxe.
    Dans l'ensemble, ça ne devrait pas être compliqué.

    Bon courage,
    Lucie

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Nous pouvons t'aider et oui, Perl sera plus performant.
    Pour les meilleures performances et une traduction complète en Perl, il te faut DBI et DBD::Oracle (pour la BDD), sinon tu peux toujours passer par un fichier intermédiaire comme tu le fais ici, mais c'est un peu dommage, par ailleurs si tu as DBD::Oracle, tu pourras utiliser quote() pour obtenir directement une version insérable dans le SQL du contenu de tes variables (pas besoin de le faire à la main, et partiellement comme dans ton shell).

    Par ailleurs je te suggère de légers changements dans l'algorithme : commence par charger dico_table.txt dans un hash, puis lit l'ensemble des fichiers que tu traitais avec ton grep en filtrant leurs lignes à l'aide du hash et en faisant les requêtes au fur et à mesure. Tu passeras de O(n*m) à O(n+m) (n étant le nombres d'éléments de dico_table.txt et m le nombre de lignes où chercher)

    --
    Jedaï

Discussions similaires

  1. conversion code source perl en php
    Par alexnet dans le forum Linux
    Réponses: 1
    Dernier message: 24/10/2007, 18h28
  2. Executer commande shell depuis perl
    Par Matmal11 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2007, 10h35
  3. [DOS] Conversion shell en batch DOS
    Par wizdom dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/03/2007, 15h57
  4. Conversion de pages PERL en ASP.NET
    Par appwnet dans le forum Modules
    Réponses: 4
    Dernier message: 14/02/2006, 01h28
  5. Shell et perl problème d'interpolation de variable.
    Par Whaouu dans le forum Langage
    Réponses: 7
    Dernier message: 26/10/2005, 17h39

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