Forum Programmation.perl Demande d'aide pour un script en perl

Posté par  .
Étiquettes : aucune
1
22
avr.
2011

Bonjour,
Je suis un chercheur en biologie et j'aimerais savoir comment faire pour mettre un fichier de nombres exemple: plusieurs lignes de chiffres sur une seul colonne, dans un tableau et ensuite récupérer le dernier chiffre pour le soustraire a l'avant dernier ainsi de suite. Merci pour votre aide précieuse.

  • # awk ?

    Posté par  (site web personnel) . Évalué à 1.

    À mon avis un simple awk suffira. J'ai trop compris le début du "plusieurs lignes de chiffres sur une seul colonne, dans un tableau". Mais en supposant que le fichier est :

    COLA COLB COLC COLD
    COLA COLB COLC COLD
    COLA COLB COLC COLD
    COLA COLB COLC COLD
    COLA COLB COLC COLD
    COLA COLB COLC COLD

    Alors il suffit de faire :
    awk '{print $1-$2}' fichier > result.dat

    Ça donnera le résultat de COLA-COLB.

    Si c'est pas ce qui est demandé alors je m'excuse.

    • [^] # Re: awk ?

      Posté par  . Évalué à 1.

      Il n y a pas de quoi s'excuser.
      ce que j'ai envie de faire c'est exemple :
      A1
      A2
      A3
      A4
      A5

      A5-A4>res, A5-A3>res, A5-A2>res, A5-A1>res ensuite
      A4-A3>res, A4-A2>res, A4-A1>res etc ...

      Merci encore

  • # Simple

    Posté par  (site web personnel) . Évalué à 2.

    L'algo est très simple, après peut être veux-tu savoir comment ouvrir un fichier pour en lire ses lignes, ou écrire dans un fichier.

    Exemple qui lit un fichier passé en paramètre, et écrit sur la sortie standard.

    use strict;
    use warnings;
    
    my @lines;
    my $path = shift; # gets and removes first param from command line, ie. $ARGV[0]
    
    if (open (my $f, '<', $path)) {
      do {
        local $\; # slurp mode, <> will read whole file in one go, line by line
        @lines = <$f>;
      };
    
      # note: $#lines == last index of @lines
      for (my $i = $#lines; $i > 0; $i--) {
        for (my $j = $i-1; $j >=0; $j--) {
            print $lines[$i]-$lines[$j], "\n";
        }
      }
    
      close $f;
    } else {
      die "Cannot open '$path': $!\n"
    }
    

    La doc intéressante est:
    http://perldoc.perl.org/functions/open.html (ouvrir un fichier)
    http://perldoc.perl.org/functions/print.html (écrire, potentiellement dans un fichier)

    • [^] # Re: Simple

      Posté par  . Évalué à 1.

      Bonjour Lom,

      Ton script et très intéressant, je l'ai tester et effectivement il me donne le resultat de chaque soustraction mais j'aimerais savoir comment faire pour mettre en print le calcul et le résultat ex: 10-5 = 5

      Merci pour tout.

      • [^] # Re: Simple

        Posté par  (site web personnel) . Évalué à 4.

        Savoir comment afficher la valeur d'une variable est un peu la basse de tout langage... En perl tu peux interpoler les variables si elles sont placées entre double quotes, donc judicieusement réutiliser le calcul en le plaçant entre doubles quotes sera suffisant.

        Ceci dit, dans un but uniquement didactique, bien sur, et puisque c'est du perl, voila une version (5.10+) qui permet de ne pas dupliquer le code de la soustraction tout en étant imbittable:

        for (join (' - ', @lines[$i, $j])) {say "$_ . = " , eval };
        
        • [^] # Re: Simple

          Posté par  (site web personnel) . Évalué à 3.

          Ne pas oublier le "use feature 'say';" bien sûr.

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # Re: Simple

            Posté par  . Évalué à 0.

            Merci pour tout.
            Benoit

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.