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 :

selection ligne et colonne fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut selection ligne et colonne fichier
    Bonjour à tous,

    J'ai un fichier ressemblant à :

    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
     
    1	C	446.91	218.86	8	0
    2	G	419.50	223.57	0	0
    3	A	393.68	233.88	0	0
    4	A	370.56	249.35	9	0
    5	T	348.14	268.84	1	16
    6	C	300.19	245.26	0	15
    7	C	252.25	221.68	0	14
    8	A	204.30	198.10	2	13
    9	G	159.73	144.71	0	0
    10	C	111.95	155.20	0	0
    .
    .
    .
    25      T       442.18  912.28  2       31
    26      C       405.45  972.69  0       0
    27      T       425.53  1018.09 0       0
    28      G       471.84  1036.00 0       0
    29      G       517.24  1015.92 0       0
    30      C       535.15  969.61  0       0
    31      A       495.59  911.01  3       25
    32      G       494.33  857.59  0       24
    .
    .
    .
    et je souhaire récuperer les lignes 26 à 32 et la colonne 5. J'ai donc fait ceci :

    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
     
    use strict;
    use warnings;
     
    open FICHIER,"< 1-nos-RA-1.ct.ss" or die "Le fichier n'existe pas !";
    open WRITER,"> test.txt" or die "Le fichier ne peut être édité !\n";
     
    my $i=0;
    my @cols;
    while (my $ligne = <FICHIER>){
    	if($i==25 || $i==26 || $i==27 || $i==28 || $i==29 || $i==30 || $i==31){
    		@cols = split(/\t/, $ligne);			
    		my @value= split(' ',$cols[5]);
    			print "$value[0]\n";	
     
     
    	}
    	$i++
    }
    close FICHIER;
    close WRITER;
    Mais cela ne fonctionne pas, car il ne me retourne pas $value[0] (donc 0 dans ce cas) mais :
    quelqu'un pourrait me dire d'où vient mon erreur ?

    Merci d'avance !

  2. #2
    Membre averti Avatar de zanker
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Par défaut
    Bonjour,

    l'exposé de ton problème n'est pas clair sur ce que tu veux obtenir !
    Ton code est correct et correspond à ce qu'il doit afficher.
    Tu as une boucle qui affiche la valeur de la 5ème colonne pour les lignes n°26 à 32.

    Qu'attends-tu comme résultat ? Soit plus précis.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    et bien je veux la premiere valeur de ma colonne 5 ....

  4. #4
    Membre averti Avatar de zanker
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Par défaut
    Et bien, il te suffit de remplacer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($i==25 || $i==26 || $i==27 || $i==28 || $i==29 || $i==30 || $i==31){
    	@cols = split(/\t/, $ligne);			
    	my @value= split(' ',$cols[5]);
    	print "$value[0]\n";	
    }
    par ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($i==25)
    {	@cols = split(/\t/, $ligne);			
    	my @value= split(' ',$cols[5]);
    	print "$value[0]\n";	
    }
    ou plus simple encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($i==25)
    {	@cols = split(/\t/, $ligne);			
    	print "$cols[5]\n";	
    	last;
    }

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    merci cela fonctionne mais en fait, je pensais récuperer chacune des valeurs des lignes 25 à 32 car je dois les comparer et faire quelque chose si elles sont toutes égales à 0 .... comment puis je m'y prendre ?
    Je pensais à creer un tableau avec les valeurs :
    @value = [0,0,0,0,24,25] et regarder si les valeurs sont = ... mais je n'y arrive pas ...

  6. #6
    Membre averti Avatar de zanker
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Par défaut
    Citation Envoyé par Nifaste Voir le message
    merci cela fonctionne mais en fait, je pensais récuperer chacune des valeurs des lignes 25 à 32 car je dois les comparer et faire quelque chose si elles sont toutes égales à 0 .... comment puis je m'y prendre ?
    Pour le bloc "if", il faut le remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my @values; # Contiendra toutes les valeurs de la colonne n°5 des lignes 25 à 32
    if($i==25 || $i==26 || $i==27 || $i==28 || $i==29 || $i==30 || $i==31){
    	@cols = split(/\t/, $ligne);			
    	push(@values, $cols[5]);
     
    }
    print "$values[0]\n"; # Affiche la première valeur de la colonne 5 donc de la ligne n°25
     
    # Ici traiter les valeurs de la colonne n°5 qui sont conservés dans la variable tableau @values
    # $values[0], $values[1] ... etc

  7. #7
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    merci beaucoup pour ton aide ! je ne connaissais pas "push"

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

Discussions similaires

  1. [PERL] Normaliser un fichier csv : de lignes en colonnes
    Par nicolep dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/11/2008, 14h09
  2. popup lors selection ligne - mais colonne spécifique ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 4
    Dernier message: 07/04/2008, 11h13
  3. parcours de lignes et colonnes d'un fichier excel
    Par guintolli dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/12/2007, 11h33
  4. Lire une ligne et colonne fichier texte
    Par Naoli dans le forum Général Python
    Réponses: 4
    Dernier message: 24/11/2007, 12h56
  5. statistiques sur les lignes et colonnes d'un fichier
    Par ericbareke dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 16h09

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