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 :

Recupération de plusieurs lignes dans un fichier


Sujet :

Langage Perl

  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 Recupération de plusieurs lignes dans un fichier
    Bonjour,

    Je dois récupérer la " Description " des mes fonctions qui peuvent être sur une ou plusieurs lignes.

    Voici le fichier d'entrée :

    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
     
    	Function: qoConstruct
    		Description: Construct the object
    		Returns
    		Parameters
    	Function: qoSetEnabled
    		Description: Enable or Disable the QuickObject
    		Returns
    			Boolean:
    	Function: PutItemValue
    		Description: This function actually puts the value into the QuickObject
    				it does not update other QuickObjects, but does clear the 
    				modifed flag
    		Returns
    			Boolean:
    			INT:
    J'ai réussis a faire 2 codes mais je n'obtiens pas ce que je veux.

    Le premier (très simple) me remonte seulement la première ligne de ma description dans mon invite de commande :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    # !usr/bin/perl -w
    use strict;
    use warnings;
    require 'fonctions.pl' ;
     
    my $cpt=0;
    my $nIndentActuel=0;
     
    #######################################################################################################
    #                               Début du traitement et ouverture fichiers                             #
    #######################################################################################################
     
        print "\n-------------------------------------------------------\n";
        print "|---------------  Debut du traitement  ---------------|\n";
        print "-------------------------------------------------------\n";
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
     
    while ( my $ligne = <FICHIER>) {
    	$cpt++;
    	$nIndentActuel = CompteEspaces($ligne); # on stocker dans IndentActuel le nombre de tabulation sur la ligne en question
     
    	# Propriétés Description 
    	if ( $ligne =~ m/^\t*Description:\s*(.+)/){
    		print "Description :", $1, "\n";
    	}
     
    #######################################################################################################
    #                  End Of File, verifie que toutes les lignes du fichier sont traités                 #
    #######################################################################################################	
     
    		if (eof) {
    		print "-------------------------------------------------------\n";
    		print "|--------------- Fin du fichier courant --------------|\n";
    		print "-------------------------------------------------------\n";
    		}
    }
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "| parser_external_functions.pl a parcouru ", $cpt, " lignes |\n";
        print "-------------------------------------------------------\n";
     
     #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    Et le deuxième (plus complexe) : Je me balade dans le fichier grâce aux tabulations.

    Me remonte seulement de la deuxième à la première que j'écris dans un fichier :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    # !usr/bin/perl -w
    use strict;
    use warnings;
    require 'fonctions.pl' ;
     
    my $cpt=0; # compteur de ligne
    my $nIndentActuel=0; # indentation actuelle de tabulations
    my $nIndentDescription= 0; # identation du motif Description
    my $bBlockDescription = 0; # vrai (1) ou faux (0) pour savoir si on est dans les Returns
    my $y=0; # compteur pour parcours du tableau pour écrire
    my $j=0; # compteur pour parcours du tableau pour écrire
     
    my $NomDescription ; # Nom de la Description
    my @tab_Description =([0]); # Tableau des Description
    my $tab_Description_ligne = 0; # Compteur des Description
     
    #######################################################################################################
    #                               Début du traitement et ouverture fichiers                             #
    #######################################################################################################
     
        print "\n-------------------------------------------------------\n";
        print "|---------------  Debut du traitement  ---------------|\n";
        print "-------------------------------------------------------\n";
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
    open ECRIRE_Description,  '>', "parserDesc.txt" or die("Erreur de création de parserDesc.txt");
     
    $tab_Description[0][0]="Ligne";
    $tab_Description[0][1]="Description";
     
    while ( my $ligne = <FICHIER>) {
    	$cpt++;
    	$nIndentActuel = CompteEspaces($ligne); # on stocker dans IndentActuel le nombre de tabulation sur la ligne en question
     
    	if ($bBlockDescription == 1){ # vrai
    		if ($nIndentActuel <= $nIndentDescription){
    			$bBlockDescription = 0; #faux
    		}
    		else{
    			unless ( $ligne =~ m/^\t*Description:\s*(.+)/){
    				$ligne =~ s/\s+//g;
    				if ( $tab_Description[$tab_Description_ligne][1] eq "NULL"){
    						$tab_Description[$tab_Description_ligne][1] = $ligne;
    				}
    				else{
    					$tab_Description[$tab_Description_ligne][1] = join " ", $tab_Description[$tab_Description_ligne][1], $ligne;
    				}
    			}
    		}
    	}
    	# Propriétés Description 
    	if ( $ligne =~ m/^\t*Description:\s*(.+)/){
    		$tab_Description_ligne++; # compteur du nombre de Function Class
    		$tab_Description[$tab_Description_ligne][0]=$cpt;
    		$tab_Description[$tab_Description_ligne][1]= "NULL";
    		$bBlockDescription = 1; 
    		$nIndentDescription = CompteEspaces($ligne);
    	}		
     
    #######################################################################################################
    #                  End Of File, verifie que toutes les lignes du fichier sont traités                 #
    #######################################################################################################	
     
    		if (eof) {
    		print "-------------------------------------------------------\n";
    		print "|--------------- Fin du fichier courant --------------|\n";
    		print "-------------------------------------------------------\n";
    		}
    }	
     
    #######################################################################################################
    #                                       Ecriture des Objets                                           #
    ####################################################################################################### 
     
    for ($y=0; $y<=$tab_Description_ligne; $y++){
    	for ($j=0; $j<=1; $j++){
    		print ECRIRE_Description $tab_Description[$y][$j], "\			";
    	}
    	print ECRIRE_Description "\n";
    }
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "| parser_external_functions.pl a parcouru ", $cpt, " lignes |\n";
        print "-------------------------------------------------------\n";
     
     #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    Je sèche un peu et j'ai vraiment besoin d'aide.

    En vous remerciant par avance.

  2. #2
    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
    Pourquoi ne pas récupérer toutes les lignes entre Description et Returns, un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    push @description, $_ if /^\s*Description:/ .. /^\s*Returns/;
    pop @description; # pour supprimer la ligne Returns

  3. #3
    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
    salut,

    Bonne idée, je viens d'essayer avec un nouveau code je ne suis pas loin du résultat final mais j'ai un résultat bizarre tout de même !

    fichier en entrée :

    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
    	Function: qoConstruct
    		Description: Construct the object
    		Returns
    		Parameters
    	Function: qoSetEnabled
    		Description: Enable or Disable the QuickObject
    		Returns
    			tutu:
    	Function: PutItemValue
    		Description: This function actually puts the value into the QuickObject
    				it does not update other QuickObjects, but does clear the 
    				modifed flag
    		Returns
    			toto:
    			INT:
    Avec ce 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
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my @bloc =([0]);
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
     
    while ( my $ligne = <FICHIER>) {
     
     
     
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
    		# affiches tout sauf le premier et le dernier pour supprimer Description et Returns
    		print @bloc[1..($#bloc-1)];
    		# puis vidage du bloc pour repartir sur une nouveau bloc
    		pop @bloc;	
    	}
    }
    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    Description: Construct the object
                    Description: Construct the object
                    Description: Enable or Disable the QuickObject
                    Description: Construct the object
                    Description: Enable or Disable the QuickObject
                    Description: This function actually puts the value into the QuickObject
                                    it does not update other QuickObjects, but does clear the
                                    modifed flag
    Je ne devrais pas avoir le motif "Description:".
    Et aussi j'ai des doublons, pourquoi ?

    Tu as une idée ?

    ps : j'ai fais exprès de faire mon tableau @bloc a deux dimensions car après je vais devoir le stocker dans un autre tableau

  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 : 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
    Oui, j'ai une idée.
    Le vidage de @bloc ne se fait pas avec l'instruction pop, mais avec une affectation d'une liste vide :
    Le pop que j'avais indiqué dans mon exemple n'était là que pour supprimer la dernière ligne.
    Par ailleurs, tu supprimes d'office la première ligne alors qu'elle contient des informations après Description.

    J'écrirais donc plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if ($in_bloc =~ /E0/) {
              pop @bloc,
              $bloc[0] =~ s/Description:\s*//;
              print @bloc;
              @bloc = ();
            }

  5. #5
    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
    Ah ok,

    Du coup j'ai refais le code avec tes conseils.

    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
    use strict;
    use warnings;
     
    my @bloc =([0]);
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
     
    while ( my $ligne = <FICHIER>) {
     
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @bloc;
              $bloc[0] =~ s/Description:\s*//;
              print @bloc;
              @bloc = ();
            }
    }
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ARRAY(0x9891ac)         Description: Construct the object
                    Enable or Disable the QuickObject
                    This function actually puts the value into the QuickObject
                                    it does not update other QuickObjects, but does clear the
                                    modifed flag
    J'ai un " ARRAY(0x9891ac) " bizarre en résultat, et aussi le motif "Description:" sur la première ligne.

    Comment résoudre ça ?
    Es ce que je pourrai remplir un autre tableau avec les valeurs des blocs ?

  6. #6
    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
    Tu as mal initialisé ton tableau :
    Ceci rempli @bloc avec une référence à un tableau contenant 0. Visiblement, tu n'as toujours pas compris les structures de données de base de perl, et notamment les références.

    Pour initialiser ton tableau :
    suffit ou bien encore

  7. #7
    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
    Je fais du Perl une semaine sur deux ! En plus étant débutant c'est pas facile de tout retenir !

    Mais effectivement en mettant my @bloc =(); ça fonctionne.

    En fait j'avais crée my @bloc =([0]); pour faire un tableau à deux dimensions, il me semblait que c'était comme ça qu'on le déclaré.

    Parce qu'en faite je veux stocker le résultat dans un autre tableau.

    Comment je peux stocker mes résultat de mon tableau @bloc dans un tableau comme celui ci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $tab_Description_ligne++;
    $tab_Description[$tab_Description_ligne][2]

  8. #8
    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
    Dans ce cas, si tu souhaites conserver toutes les occurrences, voici comment faire :

    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
    use strict;
    use warnings;
     
    my @tab_Description = ([]);
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
     
    while ( my $ligne = <FICHIER>) {
     
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @{$tab_Description[-1]}, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @{$tab_Description[-1]}; # Supprimer la dernière ligne du dernier bloc
              $tab_Description[-1]->[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
              print @{$tab_Description[-1]};
              push @tab_Description, []; # Passer au bloc suivant
            }
    }
    Attention, je n'ai pas testé. Il peut subsister des erreurs de syntaxe ou des bugs.

  9. #9
    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
    Ok super merci j'avance ! Mais je ne vois pas comment l'intégrer à mon tableau..

    En faite je veux l'intégrer à mon code mais ça ne marche pas du tout.

    Je dois remplir mon tableau $tab_Description avec dans $tab_Description[$tab_Description_ligne][1] le donnée que je récupère dans mes Bloc (avec $tab_Description_ligne qui s'incrémente).

    Car une autre partie de mon code rempli bien déjà le tab_Description_ligne][2] (mes Returns)

    Voici 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    # !usr/bin/perl -w
    use strict;
    use warnings;
    require 'fonctions.pl' ;
     
    my $cpt=0; # compteur de ligne
    my $nIndentActuel=0; # indentation actuelle de tabulations
    my $y=0; # compteur pour parcours du tableau pour écrire
    my $j=0; # compteur pour parcours du tableau pour écrire
     
    my @tab_Description =([0]); # Tableau des Description
    my $tab_Description_ligne = 0; # Compteur des Description
     
    my $nIndentReturn= 0; # identation du motif Return
    my $bBlockReturn = 0; # vrai (1) ou faux (0) pour savoir si on est dans les Returns
     
    my @bloc =();
     
    #######################################################################################################
    #                               Début du traitement et ouverture fichiers                             #
    #######################################################################################################
     
        print "\n-------------------------------------------------------\n";
        print "|---------------  Debut du traitement  ---------------|\n";
        print "-------------------------------------------------------\n";
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
    open ECRIRE_Description,  '>', "parserDesc.txt" or die("Erreur de création de parserDesc.txt");
     
    $tab_Description[0][0]="Ligne";
    $tab_Description[0][1]="Description";
    $tab_Description[0][2]="Returns";
     
     
    while ( my $ligne = <FICHIER>) {
    	$cpt++;
    	$nIndentActuel = CompteEspaces($ligne); # on stocker dans IndentActuel le nombre de tabulation sur la ligne en question
     
    #######################################################################################################
    #                                            Description                                              #
    #######################################################################################################	
    	if ( ( $ligne =~ m/\t{3}Data Field Class:\s*(.+)/ ) ||
    	( $ligne =~ m/\t{3}Frame Class:\s*(.+)/ )||
    	( $ligne =~ m/\t{3}Child Table Class:\s*(.+)/ )||
    	( $ligne =~ m/\t{3}Multiline Field Class:\s*(.+)/ )) {
    		$tab_Description_ligne++; # compteur du nombre de Objet Class
    		$tab_Description[$tab_Description_ligne][0]=$cpt;
    		$tab_Description[$tab_Description_ligne][1]= "NULL";
    		$tab_Description[$tab_Description_ligne][2]= "NULL";
    	}
     
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @{$tab_Description[-1]}, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @{$tab_Description[-1]}; # Supprimer la dernière ligne du dernier bloc
              $tab_Description[-1]->[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
              print @{$tab_Description[-1]};
    		  $tab_Description[$tab_Description_ligne][1] = @{$tab_Description[-1]};
              push @tab_Description, []; # Passer au bloc suivant
         }
     
    #######################################################################################################
    #                                            Returns                                                  #
    #######################################################################################################		
     
    	if ($bBlockReturn == 1){ # vrai
    		if ($nIndentActuel <= $nIndentReturn){
    			$bBlockReturn = 0; #faux
    		}
    		else{
    			unless ( $ligne =~ m/^\t*Returns\s*(.+)/){
    				$ligne =~ s/\s+//g;
    				# chomp($ligne);
    				if ( $tab_Description[$tab_Description_ligne][2] eq "NULL"){
    						$tab_Description[$tab_Description_ligne][2] = $ligne;
    				}
    				else{
    					$tab_Description[$tab_Description_ligne][2] = join "-", $tab_Description[$tab_Description_ligne][2], $ligne;
    				}
    			}
    		}
    	}
    	# Propriétés Return 
    	if ( $ligne =~ m/^\t*Returns/){
    		$bBlockReturn = 1; 
    		$nIndentReturn = CompteEspaces($ligne);
    	}	
     
    #######################################################################################################
    #                  End Of File, verifie que toutes les lignes du fichier sont traités                 #
    #######################################################################################################	
     
    		if (eof) {
    		print "-------------------------------------------------------\n";
    		print "|--------------- Fin du fichier courant --------------|\n";
    		print "-------------------------------------------------------\n";
    		}
    }	
     
    #######################################################################################################
    #                                       Ecriture du Tableau                                           #
    ####################################################################################################### 
     
    for ($y=0; $y<=$tab_Description_ligne; $y++){
    	for ($j=0; $j<=2; $j++){
    		print ECRIRE_Description $tab_Description[$y][$j], "\			";
    	}
    	print ECRIRE_Description "\n";
    }
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "| parser_external_functions.pl a parcouru ", $cpt, " lignes |\n";
        print "-------------------------------------------------------\n";
     
     #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    Voici ce que j'obtiens en sorti :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ligne			Description			Returns			
    1			4			NULL			
    5			4			Boolean:			
    9			6			Boolean:-INT:
    Alors que je devrais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ligne			Description			Returns			
    1			Construct the object			NULL			
    5			Enable or Disable the QuickObject			Boolean:			
    9			This function actually puts the value into the QuickObject it does not up			Boolean:-INT:
    Je sais que c'est normal que j'obtienne 4, 4, 6 dans la colonne description mais comment avoir les données et non pas la valeur ?

  10. #10
    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
    Quand j'écris $tab_Description[-1], je déréférence le dernier élément du tableau @tab_Description.
    Mais de ton coté, tu as mélangé l'usage d'un indice $tab_Description_ligne avec cette écriture. Je pense qu'il faut que tu homogénéises ça car il est très difficile de comprendre. Par ailleurs, je n'ai pas l'impression que tu renseignes les bonnes informations au bon endroit.

    Il faut sans doute que tu trouves une aide locale, car je ne pourrai pas faire d'essais avec ton code (trop complexe, pas suffisamment de temps pour entrer dedans et le comprendre).

  11. #11
    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
    Comment trouver une aide locale ?

    Philou c'est vraiment important c'est ma dernière étape de mon projet, il faudrait vraiment que je gère cette partie.

    J'ai vraiment besoin d'aide... !

  12. #12
    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
    Essaye de remplacer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @{$tab_Description[-1]}, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @{$tab_Description[-1]}; # Supprimer la dernière ligne du dernier bloc
              $tab_Description[-1]->[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
              print @{$tab_Description[-1]};
    		  $tab_Description[$tab_Description_ligne][1] = @{$tab_Description[-1]};
              push @tab_Description, []; # Passer au bloc suivant
         }
    par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @bloc; # Supprimer la dernière ligne du dernier bloc
              $bloc[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
              $tab_Description[$tab_Description_ligne][1] = join @bloc;
              @bloc = (); # Passer au bloc suivant
         }

  13. #13
    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
    Merci pour ta réponse :

    J'ai fais le remplacement mais ça ne rend rien :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    # !usr/bin/perl -w
    use strict;
    use warnings;
    require 'fonctions.pl' ;
     
    my $cpt=0; # compteur de ligne
    my $nIndentActuel=0; # indentation actuelle de tabulations
    my $y=0; # compteur pour parcours du tableau pour écrire
    my $j=0; # compteur pour parcours du tableau pour écrire
     
    my @tab_Description =([0]); # Tableau des Description
    my $tab_Description_ligne = 0; # Compteur des Description
     
    my $nIndentReturn= 0; # identation du motif Return
    my $bBlockReturn = 0; # vrai (1) ou faux (0) pour savoir si on est dans les Returns
     
    my @bloc =();
     
    #######################################################################################################
    #                               Début du traitement et ouverture fichiers                             #
    #######################################################################################################
     
        print "\n-------------------------------------------------------\n";
        print "|---------------  Debut du traitement  ---------------|\n";
        print "-------------------------------------------------------\n";
     
    open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
    open ECRIRE_Description,  '>', "parserDesc.txt" or die("Erreur de création de parserDesc.txt");
     
    $tab_Description[0][0]="Ligne";
    $tab_Description[0][1]="Description";
    $tab_Description[0][2]="Returns";
     
     
    while ( my $ligne = <FICHIER>) {
    	$cpt++;
    	$nIndentActuel = CompteEspaces($ligne); # on stocker dans IndentActuel le nombre de tabulation sur la ligne en question
     
    #######################################################################################################
    #                                         Colonne Description                                         #
    #######################################################################################################	
    	if ( ( $ligne =~ m/\t{3}Data Field Class:\s*(.+)/ ) ||
    	( $ligne =~ m/\t{3}Frame Class:\s*(.+)/ )||
    	( $ligne =~ m/\t{3}Child Table Class:\s*(.+)/ )||
    	( $ligne =~ m/\t{3}Multiline Field Class:\s*(.+)/ )) {
    		$tab_Description_ligne++; # compteur du nombre de Function Class
    		$tab_Description[$tab_Description_ligne][0]=$cpt;
    		$tab_Description[$tab_Description_ligne][1]= "NULL";
    		$tab_Description[$tab_Description_ligne][2]= "NULL";
    	}
     
    	my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
     
    	push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    	# Si l'on a trouvé le tag de fin, on traite le bloc
    	# traitement du bloc
    	if ($in_bloc =~ /E0/) {
              pop @bloc; # Supprimer la dernière ligne du dernier bloc
              $bloc[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
              $tab_Description[$tab_Description_ligne][1] = join @bloc;
              @bloc = (); # Passer au bloc suivant
         }
     
    #######################################################################################################
    #                                         Colonne Returns                                             #
    #######################################################################################################		
     
    	if ($bBlockReturn == 1){ # vrai
    		if ($nIndentActuel <= $nIndentReturn){
    			$bBlockReturn = 0; #faux
    		}
    		else{
    			unless ( $ligne =~ m/^\t*Returns\s*(.+)/){
    				$ligne =~ s/\s+//g;
    				# chomp($ligne);
    				if ( $tab_Description[$tab_Description_ligne][2] eq "NULL"){
    						$tab_Description[$tab_Description_ligne][2] = $ligne;
    				}
    				else{
    					$tab_Description[$tab_Description_ligne][2] = join "-", $tab_Description[$tab_Description_ligne][2], $ligne;
    				}
    			}
    		}
    	}
    	# Propriétés Return 
    	if ( $ligne =~ m/^\t*Returns/){
    		$bBlockReturn = 1; 
    		$nIndentReturn = CompteEspaces($ligne);
    	}	
     
    #######################################################################################################
    #                  End Of File, verifie que toutes les lignes du fichier sont traités                 #
    #######################################################################################################	
     
    		if (eof) {
    		print "-------------------------------------------------------\n";
    		print "|--------------- Fin du fichier courant --------------|\n";
    		print "-------------------------------------------------------\n";
    		}
    }	
     
    #######################################################################################################
    #                                       Ecriture du Tableau                                           #
    ####################################################################################################### 
     
    for ($y=0; $y<=$tab_Description_ligne; $y++){
    	for ($j=0; $j<=2; $j++){
    		print ECRIRE_Description $tab_Description[$y][$j], "\			";
    	}
    	print ECRIRE_Description "\n";
    }
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "| parser_external_functions.pl a parcouru ", $cpt, " lignes |\n";
        print "-------------------------------------------------------\n";
     
     #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    En sorti ma colonne Description est vide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ligne			Description			Returns			
    1						NULL			
    5						Boolean:			
    9						Boolean:-INT:

  14. #14
    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
    Il faut au minimum corriger
    par

  15. #15
    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
    Effectivement désolé !

    Super vraiment un grand Merci Beaucoup Philou tout est parfait !

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

Discussions similaires

  1. Ecrire plusieurs lignes dans un fichier texte
    Par Ladoll dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 06/02/2013, 18h06
  2. Lecture de plusieurs lignes dans un fichier
    Par ManusDei dans le forum Langage
    Réponses: 8
    Dernier message: 08/08/2012, 17h33
  3. Réponses: 3
    Dernier message: 15/06/2009, 10h43
  4. Ecrire plusieurs lignes dans un fichier texte
    Par kinon dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/02/2009, 15h07
  5. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47

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