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 fichier par colonne


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut lire fichier par colonne
    Bonjour,

    J'ai un fichier sous forme de tableau, et je veux lire ce tableau colonne par colonne et faire un traitement après pour chaque colonne (calculer le nombre de "OO").

    Merci d'avance.

    j'ai fait ce bout de code, mais le traitement se fait par ligne, alors que je le veux par colonne
    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
     
    ...
     
    my $head = <F>
    print OUT $head;
    while (my $line = <F>){
    chomp $line;
    my @tab = split (/\t/, $line);
    foreach my $colonne(@tab)){
    if ($colonne eq "OO"){
    $cout++;
    }
    }
    print OUT "$count\n";
    $count = 0;
    }
    close F;
    close OUT;

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Si ta question est d'améliorer ton code pour avoir un comptage par colonne, le code ci-dessous te le donne. (à adapter un peu pour faire ce que tu veux des résultats)

    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
    #!/usr/bin/perl -w
    my %hash;
    open(F, 'essai.txt') or die "pas ouvert";
    while (my $line = <F>){
        chomp $line;
        my @tab = split (/\t/, $line);
        my $taille = @tab;
     
        for( my $i=0;$i<$taille;$i++){
            if ($tab[$i] eq "OO"){
                if ( defined $hash{$i} ){
                    $hash{$i}++;
                }else{
                    $hash{$i} = 1;
                }
            }
        }
    }
     
    foreach my $col (keys(%hash)){
        print "col num $col contient $hash{$col} fois le motif OO\n";
    }

  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
    Tout d'abord, en ligne 11, je suppose que tu voulais écrire
    Ensuite, au lieu d'incrémenter cette variable pour chaque colonne, tu vas incrémenter une variable tableau dont l'indice sera l'indice de la colonne.

    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
    my $head = <F>
    print OUT $head;
    my @count;
    while (my $line = <F>){
      chomp $line;
      my @tab = split (/\t/, $line);
      my $colonne = 0;
      foreach my $valeur (@tab)) {
        if ($valeur eq "OO"){
          $count[$colonne++]++;
        }
      }
    }
    my $colonne = 0;
    foreach my $count (@count) {
      print OUT "Colonne ", $colonne++, " : ", $count\n";
    }
    close F;
    close OUT;
    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
    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
    Pour les mongers, on peut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      my $colonne = 0;
      foreach my $valeur (@tab)) {
        if ($valeur eq "OO"){
          $count[$colonne++]++;
        }
      }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count[$_] += ($tab[$_] eq "OO" ? 1 : 0) foreach 0..$#tab;
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count[$_]++ foreach grep $tab[$_] eq "OO", 0 .. $#tab;
    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

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    Si ta question est d'améliorer ton code pour avoir un comptage par colonne, le code ci-dessous te le donne. (à adapter un peu pour faire ce que tu veux des résultats)

    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
    #!/usr/bin/perl -w
    my %hash;
    open(F, 'essai.txt') or die "pas ouvert";
    while (my $line = <F>){
        chomp $line;
        my @tab = split (/\t/, $line);
        my $taille = @tab;
     
        for( my $i=0;$i<$taille;$i++){
            if ($tab[$i] eq "OO"){
                if ( defined $hash{$i} ){
                    $hash{$i}++;
                }else{
                    $hash{$i} = 1;
                }
            }
        }
    }
     
    foreach my $col (keys(%hash)){
        print "col num $col contient $hash{$col} fois le motif OO\n";
    }

    Merci pour ta réponse,
    Au fait, je voulais afficher dans mon fichier OUT ce que j'ai dans chaque colonne et à la fin de chaque colonne écrire le nombre de motif OO, (0 ou plus)

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Pour les mongers, on peut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      my $colonne = 0;
      foreach my $valeur (@tab)) {
        if ($valeur eq "OO"){
          $count[$colonne++]++;
        }
      }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count[$_] += ($tab[$_] eq "OO" ? 1 : 0) foreach 0..$#tab;
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count[$_]++ foreach grep $tab[$_] eq "OO", 0 .. $#tab;
    Merci pour ta réponse Philou,
    Au fait, je voulais afficher dans mon fichier OUT ce que j'ai dans chaque colonne et à la fin de chaque colonne écrire le nombre de motif OO, (0 ou plus)

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Soit mon tableau comme cela :
    A1 A2 A3 ...
    CC NA OO ...
    NA OO OO

    dans le OUT je veux ecrire:
    A1 A2 A3 ...
    CC NA OO ...
    NA OO OO
    0 1 2 ..

    Merci d'avance

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par hajarita Voir le message
    dans le OUT je veux ecrire:
    A1 A2 A3 ...
    CC NA OO ...
    NA OO OO
    0 1 2 ..

    Merci d'avance
    ok donc voilà la modification de mon code:

    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
    #!/usr/bin/perl -w
    my %hash;
    open(F, 'essai.txt') or die "pas ouvert";
    open (OUT,...
    while (my $line = <F>){
        chomp $line;
        my @tab = split (/\t/, $line);
        my $taille = @tab;
        print OUT "$line\n";
        for( my $i=0;$i<$taille;$i++){
            if ($tab[$i] eq "OO"){
                if ( defined $hash{$i} ){
                    $hash{$i}++;
                }else{
                    $hash{$i} = 1;
                }
            }
        }
    }
     
    foreach my $col (keys(%hash)){
        print OUT "$hash{$col}\t";
    }
    Citation Envoyé par Philou67430 Voir le message
    Pour les mongers, on peut remplacer :
    j'aime bien cette écriture mais je trouve pas ça compliqué à reprendre comme code

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    ok donc voilà la modification de mon code:

    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
    #!/usr/bin/perl -w
    my %hash;
    open(F, 'essai.txt') or die "pas ouvert";
    open (OUT,...
    while (my $line = <F>){
        chomp $line;
        my @tab = split (/\t/, $line);
        my $taille = @tab;
        print OUT "$line\n";
        for( my $i=0;$i<$taille;$i++){
            if ($tab[$i] eq "OO"){
                if ( defined $hash{$i} ){
                    $hash{$i}++;
                }else{
                    $hash{$i} = 1;
                }
            }
        }
    }
     
    foreach my $col (keys(%hash)){
        print OUT "$hash{$col}\t";
    }

    j'aime bien cette écriture mais je trouve pas ça compliqué à reprendre comme code
    C'est la modification que j'ai fait, mais les chiffres qui me donne à la fin de chaque colonne ne corresponds pas au nombre de motif OO, et en plus je n'ai pas pour chaque colonne un chiffre au dessous!!!

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    heu tu pourrais mettre ton bout de code car je vois pas pourquoi tu n'aurais pas 1 compte par colonne
    pour ce qui est de l'erreur de comptage, c'est peut être dû à des caractères non visible comme un espace, retour à la ligne pour la dernière colonne...

  11. #11
    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
    J'ai l'impression que le plus simple serait peut-être de commencer par transposer les lignes et les colonnes dans une structure temporaire.

    Le décompte devient alors trivial.

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    heu tu pourrais mettre ton bout de code car je vois pas pourquoi tu n'aurais pas 1 compte par colonne
    pour ce qui est de l'erreur de comptage, c'est peut être dû à des caractères non visible comme un espace, retour à la ligne pour la dernière colonne...
    C'est exactement le code que tu m'as écrit, au dessus. Il donne un chiffre seulement pour les colonnes où il y a le motif OO si il n y as pas il n'affiche rien.
    Dans cet exemple voila ce qu'il va afficher :
    A1 A2 A3 ...
    CC NA OO ...
    NA OO OO
    1 2 ..

    En plus, le résultat ne s'affiche pas par ordre de colonne, c'est mélanger; donc j'ai modifié le code par cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach my $colonne (sort {$a <=> $b} keys(%hash)){
    print OUT "$hash{$colonne}\t";
    }
    Mais voila, je ne sais pas quoi modifier pour qu'il affiche le résultat, aussi, pour les colonnes qui ne contient pas le motif, comme ça j'aurai le résultat pour chaque colonne.

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    ah oui en fait c'est normal car on ne crée la clé du hash que si on trouve OO.
    tu devrais réussir à résoudre ton problème (ainsi que l'ordre des clés dans le hash) en changeant la boucle foreach par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for( my $j=0;$i<$taille;$j++){
        if ( defined $hash{$j} ){
            print OUT "$hash{$j}\t";
        }
        else{
            print OUT "0\t";
        }
    }
    Attention, il faut définir la variable $taille avant le while pour qu'elle soit reconnu ici

    c'est vrai que la solution de @Lolo78 serait plus simple (et surement même plus rapide)

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    ah oui en fait c'est normal car on ne crée la clé du hash que si on trouve OO.
    tu devrais réussir à résoudre ton problème (ainsi que l'ordre des clés dans le hash) en changeant la boucle foreach par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for( my $j=0;$i<$taille;$j++){
        if ( defined $hash{$j} ){
            print OUT "$hash{$j}\t";
        }
        else{
            print OUT "0\t";
        }
    }
    Attention, il faut définir la variable $taille avant le while pour qu'elle soit reconnu ici

    c'est vrai que la solution de @Lolo78 serait plus simple (et surement même plus rapide)

    Merci pour ta réponse.
    Oui tout à fait la solution de @Lolo78 est plus simple, je l'ai fait aussi , mais je voudrais arrivé comme même à afficher le résultat par colonne.

    Merci à vous tous.

  15. #15
    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
    Bonsoir,

    solution avec transposition: 6 lignes de code réel.

    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
    use strict;
    use warnings;
     
    my @transposed_array;
    while (<DATA>) {
         print;
         my $i;
         map {$transposed_array[$i++] .= $_;} split;
    }
    print join "  ", map {my $count = s/OO/00/g; $count? $count : 0;} @transposed_array;
     
    __DATA__
    A1 A2 A3 A4 A5
    CC NA OO UV OO
    NA OO OO OO CP
    TR OO UU RR OO

    Résultat:
    $ perl row_col.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A1 A2 A3 A4 A5
    CC NA OO UV OO
    NA OO OO OO CP
    TR OO UU RR OO
    0  2  2  1  2

  16. #16
    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
    Et, je n'avais pas le temps toute à l'heure, mais, pour le fun, la version uniligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ perl -pe '$i = 0; map {@c[$i++] .= $_;} split; END {print join "  ", map {$d = s/OO/00/g; $d ? $d : 0;} @c}' data.txt
    A1 A2 A3 A4 A5
    CC NA OO UV OO
    NA OO OO OO CP
    TR OO UU RR OO
    0  2  2  1  2

  17. #17
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Et, je n'avais pas le temps toute à l'heure, mais, pour le fun, la version uniligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ perl -pe '$i = 0; map {@c[$i++] .= $_;} split; END {print join "  ", map {$d = s/OO/00/g; $d ? $d : 0;} @c}' data.txt
    A1 A2 A3 A4 A5
    CC NA OO UV OO
    NA OO OO OO CP
    TR OO UU RR OO
    0  2  2  1  2
    J'adore
    Merciii :-)

  18. #18
    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
    Pour le fun, encore plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe '$"="  ";$i = 0; @c[$i++] += $_ foreach map 1*/OO/g, split; END {print "@c\n"}' text.txt
    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

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Points : 87
    Points
    87
    Par défaut
    bonjour,

    Citation Envoyé par Philou67430 Voir le message
    Pour le fun, encore plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe '$"="  ";$i = 0; @c[$i++] += $_ foreach map 1*/OO/g, split; END {print "@c\n"}' text.txt
    le premier " est pas de trop ?

    cordialement

    Ours

  20. #20
    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 ours_en_pluche Voir le message
    bonjour,



    le premier " est pas de trop ?

    cordialement

    Ours
    Non. $" est une variable spéciale de Perl, le séparateur de listes en sortie dans le cas de listes interpolées.

    Si tu as un tableau @c et fait la chose suivante:

    Cela va imprimer les éléments de la liste séparés par le(s) caractère(s) contenu(s) dans $". En temps normal, $" vaut un espace (' '), si bien que les élements de la listes seront séparés par un simple espace. Mais si tu modifies cette variable spéciale et mets le caractère "\n", par exemple, les éléments seront imprimés sous la forme d'une colonne.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lire un fichier par bloc de n*m bytes
    Par chaka_zulu dans le forum Langage
    Réponses: 1
    Dernier message: 24/05/2007, 07h26
  2. Lire fichier par C#
    Par bejaad dans le forum C#
    Réponses: 2
    Dernier message: 05/04/2007, 00h27
  3. Lire fichier ligne par ligne
    Par Tips dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 05/03/2007, 21h07
  4. Lire un fichier par la fin
    Par romaintaz dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 22/01/2007, 16h40
  5. Réponses: 6
    Dernier message: 06/01/2007, 17h30

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