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 :

Lire un fichier texte placé dans le dossier du script perl


Sujet :

Langage Perl

  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut Lire un fichier texte placé dans le dossier du script perl
    Bonsoir à tous,

    Je connais peu le langage Perl et sa notation et j'aurais souhaité une petite aide pour rédiger un script tout simple consistant à lire un fichier texte (input.txt) placé dans le dossier courant du script Perl que je souhaite exécuter.

    Par avance merci pour votre aide,
    Bonne soirée,
    Cdlt,
    User
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Hum, lire un fichier texte et ne rien faire avec, je ne vois pas trop l'utilité. Mais, bon...

    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    my $infile = "input.txt";
    open my $IN "<", $infile or die "Ouverture impossible de $infile $!";
    while (my $line = <$IN>) {
        chomp $line; # enlever le caractère de fin de ligne (si nécessaire)
        # faire quelque chose avec $line
    }
    close $IN;

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Si le script n'est pas lancé dans le dossier où se trouve le script, l'exemple de Lolo ne fonctionnera pas.

    Pour lire à coup sûr un fichier dans le dossier du script, il convient d'utiliser le module (du core) FindBin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    use strict;
    use warnings;
    use FindBin;
     
    my $infile = "$FindBin::Bin/input.txt";
    # Suite du script inchangée
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Si le script n'est pas lancé dans le dossier où se trouve le script, l'exemple de Lolo ne fonctionnera pas.

    Pour lire à coup sûr un fichier dans le dossier du script, il convient d'utiliser le module (du core) FindBin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    use strict;
    use warnings;
    use FindBin;
     
    my $infile = "$FindBin::Bin/input.txt";
    # Suite du script inchangée
    Tu as mis exactement le doigt sur mon problème.
    J'essayais d'exécuter le script depuis Excel, en VBA

    Maintenant c'est bon

    Merci à vous 2,
    Cdlt,
    Denis
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par User Voir le message
    J'essayais d'exécuter le script depuis Excel, en VBA
    Amusant comme architecture distribuée... tu peux montrer un exemple du code VBA ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Amusant comme architecture distribuée... tu peux montrer un exemple du code VBA ?
    L'idée c'est de passer une séquence sur un site, pour obtenir son alignement.

    Il existe des script Perl pour ça comme sur cette page, mais pas de code VBA.

    Donc, j'adapte le code Perl fourni sur la page et je lance le script avec cette macro VBA.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Merci, c'est intéressant.
    Est-il facilement possible de passer en paramètre au script le chemin d'accès au fichier Excel (si la macro est écrite pour Excel), ou bien directement une copie du contenu d'une zone de cellule (ou de la cellule courante, ou de la sélection courante) ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Si le script n'est pas lancé dans le dossier où se trouve le script, l'exemple de Lolo ne fonctionnera pas.
    La question d'origine spécifiait:
    ... lire un fichier texte (input.txt) placé dans le dossier courant du script Perl que je souhaite exécuter ...
    Et le titre du post également.

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Oui, j'ai bien lu la même chose
    Le dossier courant du script perl est pour moi le dossier où se trouve actuellement le script perl (courant pouvant être considéré comme "implicite" puisqu'un script perl est toujours dans un dossier).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Rebonjour,

    Citation Envoyé par Philou67430 Voir le message
    Merci, c'est intéressant.
    Est-il facilement possible de passer en paramètre au script le chemin d'accès au fichier Excel (si la macro est écrite pour Excel), ou bien directement une copie du contenu d'une zone de cellule (ou de la cellule courante, ou de la sélection courante) ?
    Je dispose d'un fichier input.txt contenant une liste de séquences.

    Et je souhaite me servir de ce script :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use LWP::UserAgent;
    use JSON;
     
    #Get a new Web user agent.
    my $ua = LWP::UserAgent->new;
    $ua->timeout(60);
    $ua->env_proxy;
    #Set a new JSON end encoder/decoder
    my $json = JSON->new->allow_nonref;
     
    #-------------------------------------------------------------------------------
    #Set up the job
     
    #URL to query
    my $rootUrl = "http://www.ebi.ac.uk/Tools/hmmer";
    my $url = $rootUrl."/search/jackhmmer";
     
    my $seq = ">2abl_A mol:protein length:163  ABL TYROSINE KINASE
    MGPSENDPNLFVALYDFVASGDNTLSITKGEKLRVLGYNHNGEWCEAQTKNGQGWVPSNYITPVNSLEKHS
    WYHGPVSRNAAEYLLSSGINGSFLVRESESSPGQRSISLRYEGRVYHYRINTASDGKLYVSSESRFNTLAE
    LVHHHSTVADGLITTLHYPAP";
     
    my %content = (
      'algo'     => 'jackhmmer',
      'seq'      => $seq,
      'seqdb'    => 'pdb',
      iterations => 5,
    );
     
    #-------------------------------------------------------------------------------
    #Now POST the request and generate the search job.
    my $response = $ua->post(
      $url,
      'content-type' => 'application/json',
      Content        => $json->encode( \%content )
    );
     
    if($response->status_line ne "201 Created"){
      die "Failed to create job, got:".$response->status_line;
    }
     
    my $job = $json->decode( $response->content );
    print "Generated job UUID:".$job->{job_id}."\n";
     
    #Follow the redicrection to the resouce create for the job.
    my $job_location = $response->header("location");
    #Now poll the server until the job has finished
    $response = $ua->get( $job_location, 'Accept' => 'application/json' );
     
    my $max_retry = 50;
    my $count     = 1;
     
    while ( $response->status_line eq '200 OK' ) {
      my $status = $json->decode( $response->content );
     
      print "Checking status ($count)......";
      if ( $status->{status} eq 'DONE' ) {
        print "Job done.\n";
        last;
      }
      elsif ( $status->{status} eq 'ERROR' ) {
        print "Job failed, exiting!\n";
        exit(1);
      }
      elsif ( $status->{status} eq 'RUN' or $status->{status} eq 'PEND' ) {
        my ($lastIteration) = $status->{result}->[-1]->{uuid} =~ /\.(\d+)/;
        print "Currently on iteration $lastIteration [$status->{status}].\n";
      }
     
      if ( $count > $max_retry ) {
        print "Jobs should have finished.....exiting\n";;
        exit(1);
      }
      #Job still running, so give it a chance to complete.
      sleep(5);
      #Check again on the job status...
      $response = $ua->get( $job_location, 'Accept' => 'application/json' );
      $count++;
    }
     
    #Job should have finished, but we may have converged, so get the last job.
    my $results = $json->decode( $response->content );
    my $lastIteration = pop( @{ $results->{result} } );
    #Now fetch the results of the last iteration
    my $searchResult = $ua->get( $rootUrl."/results/" . $lastIteration->{uuid} . "/score", 'Accept' => 'application/json' );
    unless( $searchResult->status_line eq "200 OK"){
      die "Failed to get search results\n";  
    }
     
    #Decode the content of the full set of results
    $results = $json->decode( $searchResult->content );
    print "Matched ".$results->{'results'}->{'stats'}->{'nincluded'}." sequences ($lastIteration->{uuid})!\n";
    #Now do something more interesting with the results......
    Mon idée est de lire le contenu du fichier input.txt, de placer le résultat dans une variable ($var) et de copier dans la variable $seq le contenu de $var.
    Et à la fin de récupérer le résultat ($results) pour le copier dans le fichier output.txt, ou dans un fichier csv...

    Cdlt,
    Denis
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Merci pour tes explications.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. Fichier texte à inclure dans le dossier build
    Par dn2199 dans le forum Débuter
    Réponses: 2
    Dernier message: 21/01/2015, 20h58
  2. Réponses: 8
    Dernier message: 09/07/2006, 14h42
  3. Réponses: 3
    Dernier message: 09/06/2006, 12h36
  4. Réponses: 20
    Dernier message: 23/03/2006, 16h21
  5. Réponses: 1
    Dernier message: 24/11/2004, 16h54

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