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 :

[langage] compter les retour à la ligne


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 34
    Points
    34
    Par défaut [langage] compter les retour à la ligne
    j'ai tapé un code qui me permedt de compter le nombre de chevron ">" dans un fichier fasta

    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
     
    #!/usr/bin/perl -w
    ## marche bien , ne compte que les > chevrons en debut de ligne
    ## si>>>>> alors c'est égal à 1 >
    use strict;
     
    my $fichier;
    my $sequence;
    my $chevron=0;
    my @table;
    my $tot=0;
    my $i=0;
     
    print "\nChemin du fichier a traiter : ";
    chomp ($fichier = <STDIN>); 
     
    open (FIC , "$fichier") || die "Probleme d'ouverture: $!"; 
    while ($sequence = <FIC>) 
    { 
    chomp $sequence;
    push (@table, $sequence);
    }
    $tot=(scalar @table);
    close FIC;
     
    while ($i< $tot)
    {
    #print "$table[$i]\n";
    while ($table[$i]=~ /^>/g) { $chevron =$chevron+1; }
    $i++;
    }
    print "\nNombre de chevron $chevron\n";
    ce code marche très bien,
    maintenant j'aimeerai pouvoir compter le nb de retour à la ligne mais je n'y arrive pas!

    j'ai remplacer
    while ($table[$i]=~ /^>/g) { $chevron =$chevron+1; }
    par
    while ($table[$i]=~ /\n/g) { $chariot =$chariot+1; }
    mais ca ne donne rien.....est-ce qu'il faut ajouter des caractères d'échappement pour le "\n"?

    comment faire?

    merci
    :o :o :o

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    salut,

    tu cherches a compter le nombre de sequences dans un fichier FASTA ?


    et compter le nombre de \n, ca revient a compter le nombre de lignes non ? ( je pense que ca revient au meme, si ton \n est bien le caractere de fin de ligne)

    alors pour compter les lignes d'un fichier, on trouve la recette sur un bouquin Oreilly

    $compte += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16);

    FILE est le descripteur qui pointe sur ton fichier


    voila

    ps : pense a BIOPERL

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    merci! ca fonctionne, tu as raison c'est plus simple de compter les lignes.

    par curieusité, je peux te demander à quoi sert :
    $compte += tr/\n/\n/ while sysread(FIC, $_, 2 ** 16);
    notament les deux retour chariot côte à côte ( pourquoi un seul ne suffit pas?), le 2**16 et le sysread.

    Kinethe

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    resalut

    j'ai trouver cette recette dans un bouquin (perl en action, cookbook en anglais, qui contient un ensemble de solutions commentees a des problemes plus ou moins simples, que tout programmeur aura a resoudre)

    donc voici ce que j'ai compris :

    sysread parcours le fichier (boucle while) et lit la variable $_ (2 ** 16 correspond a la taille limite de $_ )

    ensuite pour chaque ligne lu tu fait tr/\n/\n/, qui remplace en fait \n par \n , en clair ca ne fait rien (on remplace par la meme valeur), saut que ca renvoie 1 quand ca effectue un remplacemet donc ceal permet de compter les lignes et d'incrementer $compte

    voila ce que j'ai compris, mais je ne suis pas un expert alors si quelqu'un a des complements a apporter....

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    merci tes explications sont très claires!

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/07/2007, 02h45
  2. [excel] compter les elements de la ligne
    Par CIBOOX dans le forum Excel
    Réponses: 4
    Dernier message: 07/02/2007, 11h24
  3. Réponses: 2
    Dernier message: 01/12/2006, 13h28
  4. EXCEL, enlever les retour a la ligne .
    Par Raideman dans le forum Excel
    Réponses: 1
    Dernier message: 30/11/2006, 17h25
  5. Réponses: 19
    Dernier message: 03/08/2004, 10h26

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