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 :

Compter les tabulations


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut Compter les tabulations
    Bonjour,

    Mon objectif est d'éliminer les lignes et les blocs commençant par un "!" qui sont des commentaires en centura.

    Je voudrais donc compter les tabulations en chaque début de lignes (pour identifier les blocs a éliminer).
    Afin de savoir où je suis positionné grâce à une fonction.

    Voici mon Algo :

    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
     Variable de type number:
    nIndentComment (indique le niveau d indentation du commentaire)
    nIndentActuel (indique le niveau d indentation de la ligne en cours)
     
    Fonctions:
    CompteEspaces(nIndentActuel)
    -> Retourne dans nIndentActuel le nombre d espaces en début de ligne
     
    nIndentActuel =0;
    nIndentComment = 100;
     
    while ()
       Compte Espaces(nIndentActuel);
       Si nIndentComment>=nIndentActuel
          Si ligne commence par "!"
             CompteEspaces(nIndentComment);
          Sinon
             nIndentComment=100;
             Ecrire ligne;
    Ébauche 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $nIndentActuel = 0;
    my $nIndentComment = 100;
     
    open FICHIER, '<', "X7allC.apt" or die("E/S : $!\n");
    open ECRIRE, '>', "X7allSC.txt" or die("Erreur de création de parser.txt");
     
    sub CompteEspaces(nIndent)
    {
    	my $nIndent = 0;
    	foreach ( $ligne =~ compter les tabulations ){
    	$nIndent = $nIndent + 1;
    	}
    	# quand j'ai une tabulation j'incrémente $nIndent, pour retourner le nombre de tabulation dans $nIndent
    	return $nIndent;
    }
     
    while ( my $ligne = <FICHIER> ) {
    		CompteEspaces(nIndentActuel);
    		if ( $nIndentComment >= $nIndentActuel){
    			if ( $ligne =~ m/!\s*(.+)/i ){
    				CompteEspaces(nIndentComment)
    			}
    			else{
    				nIndentComment = 100;
    				print ECRIRE $ligne;
    			}
    		}
    }
    Ce code compte les espaces mais pas les tabulations !

    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
    # !usr/bin/perl -w
    use strict;
    use warnings;
    my $espaces;
    my $cpt = 0;
     
     
    open FICHIER, '<', "X7allC.apt" or die("E/S : $!\n");
     
    while ( my $ligne = <FICHIER> ) {
    	chomp ($ligne);
    	$cpt++;
    	$_ = $ligne;
    	$espaces +=tr/ / /;
    	print "Nombre d'espaces : ", $espaces, " sur ligne ", $cpt, "\n";
    	$espaces = 0;
    }
    Pouvez vous m'aider pour faire la fonction de comptage des tabulations en début de ligne, je ne vois pas trop comment faire.

    Merci d'avance pour vos conseils et réponses

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par oliviernouhi Voir le message
    Je voudrais donc compter les tabulations en chaque début de lignes (pour identifier les blocs a éliminer).
    Afin de savoir où je suis positionné grâce à une fonction.
    Ne pourrais-tu pas utiliser une expression régulière telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my ($num_tab)  = $ligne =~ m/^(\t+)/;
    my $l = length($num_tab);

  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 : 59
    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
    Par défaut
    Ce code compte les espaces ET les tabulations :
    De même que celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $espaces = () = /(\s)/g;

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut
    super merci j'ai fais comme ceci est ça fonctionne parfaitement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while ( my $ligne = <FICHIER> ) {
    	chomp ($ligne);
    	$cpt++;
     
    	my ($num_tab)  = $ligne =~ m/^(\t+)/;
    	$l = length($num_tab);
     
    	# $_ = $ligne;
    	# $espaces +=tr/ / /;
    	print "Nombre de tabulations : ", $l, " sur ligne ", $cpt, "\n";
    	$espaces = 0;
    }
    Merci encore

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

Discussions similaires

  1. Compter les syllabes d'un mot français
    Par david_chardonnet dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2014, 10h57
  2. Réponses: 19
    Dernier message: 03/08/2004, 10h26
  3. [langage] compter les retour à la ligne
    Par Kinethe dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2004, 16h36
  4. [C#] Compter les lignes d'un DataSet
    Par alexischmit dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/04/2004, 15h17
  5. Compter les valeurs d'un tableau
    Par leeloo076 dans le forum ASP
    Réponses: 6
    Dernier message: 30/03/2004, 13h29

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