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 :

fichiers et fonctions


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut fichiers et fonctions
    Bonjour, j'ai une problématique face à un sujet : en effet, mon prof m'a envoyé un parcours d'une arborescence. Je ne vois pas la différence avec l'énonce. Le prof nous demande de nous servir de cette arborescence pour faire le code répondant à l'exercice.

    Chercher dans un dossier donné, et ses sous-dossiers, tous les fichiers qui contiennent des lignes commençant par un mot donné et écrire dans un fichier rapport la liste des fichiers répondant au critère.
    Le parcours du dossier devra se faire dans une fonction (utilisation de « sub ») distincte du reste du programme.
    Le rapport sera présenté de la façon suivante :

    Date : Thu Nov 7 10:01:41 2013
    Dossier : /chemin/dossier

    fichier1
    ligne du fichier1 commençant par le mot cherché
    ligne suivante du fichier1 commençant par le mot cherché
    ...
    dernière ligne du fichier1 commençant par le mot cherché

    fichier2
    ligne du fichier2 commençant par le mot cherché
    ligne suivante du fichier2 commençant par le mot cherché
    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
    sub AnalyseDossier {
    	# La fonction analyseDossier attend un seul paramètre qui est le nom du dossier qu'on veut analyser
     
    	my $D= shift @_; # On recupere le nom du dossier... 
     
    	# ouverture du dossier $D et creation du descripteur REP
    	opendir (REP,$D) or die ("Impossible d'ouvrir le repertoire ",$D); 
     
    	# On recupere les fichiers du descripteur REP dans @listFile
    	# Notez bien que @listFile peut contenir à la fois des dossiers et des fichiers
    	my @listFile = readdir (REP);
     
    	# on ferme le descripteur
    	close (REP); 
     
    	# Parcours des éléments du dossier $D, ils peuvent $etre des fichiers ou des dossiers
    	foreach (@listFile) {
    		# Création du nom complet :
    		my $nomComplet = $D."/".$_;
     
    		# S'il s'agit d'un fichier on le traite via la fonction de traitement
    		if (-f $nomComplet) {
    			traitement($nomComplet);
    		}
    		# sinon s'il s'agit d'un dossier autre que les dossiers . et ..
    		elsif (-d $nomComplet and $_ ne "." and $_ ne "..") { 
    			# ... on lance un nouvel appel récursif à notre fonction, sur ce dossier là :
    			AnalyseDossier ($nomComplet);
    		} 
    	} # fin de foreach (@listFile)
    } # fin de fonction analyseDossier
     
    sub traitement {
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
    	my $nomComplet = shift @_; # c'est le nom*complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print "\n$nomComplet : $taille";
     
    } # fin de fonction traitement
     
     
    ######*PROGRAMME PRINCIPAL ######
    print "\nCe programme parcourt toute l'arborescence d'un dossier que vous allez donner";
    print "\nIl va afficher tous les fichiers et les sous-dossiers";
    print "\nPour chaque fichier, on affichera le nom et la taille";
     
    # saisie
    print "\n\nQuel dossier ? Entrez le nom complet\n";
    $D = <STDIN>;
    chomp $D;
     
    # traitement
    if (-d $D) {
    	AnalyseDossier ($D);
    	}
    else {
    	die ("Impossible d'ouvrir le repertoire ",$D);
    	}
     
    print "\n\nAu revoir !\n\n";

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    Le parcours du dossier devra se faire dans une fonction (utilisation de « sub ») distincte du reste du programme.
    La fonction sub est déjà donnée : sub AnalyseDossier {}

    On voit que la fonction sub traitement {} traite UN fichier :
    en affichant le nom et la taille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "\n$nomComplet : $taille";
    A cet endroit il ne te reste plus qu'à ouvrir le fichier, à le parcourir ligne par ligne,
    à rechercher si le mot saisi se trouve en début de ligne
    et a formater la réponse selon la demande du prof :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	open my $FH_IN, "<", $fic_in or die "ouverture impossible de $fic_in $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			ECRITURE DANS LE FICHIER...
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
    Il y au moins un exemple récent : ICI

    Il ne te reste qu'à ajouter la demande du mot recherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # saisie
    print "\n\nEntrez le mot recherché :\n";
    my $M = <STDIN>;
    chomp $M;
    Ouvrir un fichier en écriture qui contiendra le rapport.

    Rechercher la date et à la formater selon la demande du prof, une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ###############
    # Date et Heure
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
      return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
    }
    Essaie de commencer quelque chose par toi-même, le jour de l'examen tu n'auras probablement pas accès à developpez.com

    Bon grossièrement traitement {} devient :
    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
    sub traitement {
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
    	my $nomComplet = shift @_; # c'est le nom*complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print "\n$nomComplet : $taille";
    	open my $FH_IN, "<", $nomComplet or die "ouverture impossible de $nomComplet $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			print "$ligne\n";                               # MAIS IL FAUT FAIRE LE PRINT DANS LE FICHIER RAPPORT
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
     
    } # fin de fonction traitement

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Examen difficile
    Citation Envoyé par dmganges Voir le message
    Bonjour,

    La fonction sub est déjà donnée : sub AnalyseDossier {}

    On voit que la fonction sub traitement {} traite UN fichier :
    en affichant le nom et la taille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "\n$nomComplet : $taille";
    A cet endroit il ne te reste plus qu'à ouvrir le fichier, à le parcourir ligne par ligne,
    à rechercher si le mot saisi se trouve en début de ligne
    et a formater la réponse selon la demande du prof :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	open my $FH_IN, "<", $fic_in or die "ouverture impossible de $fic_in $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			ECRITURE DANS LE FICHIER...
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
    Il y au moins un exemple récent : ICI

    Il ne te reste qu'à ajouter la demande du mot recherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # saisie
    print "\n\nEntrez le mot recherché :\n";
    my $M = <STDIN>;
    chomp $M;
    Ouvrir un fichier en écriture qui contiendra le rapport.

    Rechercher la date et à la formater selon la demande du prof, une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ###############
    # Date et Heure
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
      return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
    }
    Essaie de commencer quelque chose par toi-même, le jour de l'examen tu n'auras probablement pas accès à developpez.com

    Bon grossièrement traitement {} devient :
    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
    sub traitement {
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
    	my $nomComplet = shift @_; # c'est le nom*complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print "\n$nomComplet : $taille";
    	open my $FH_IN, "<", $nomComplet or die "ouverture impossible de $nomComplet $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			print "$ligne\n";                               # MAIS IL FAUT FAIRE LE PRINT DANS LE FICHIER RAPPORT
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
     
    } # fin de fonction traitement
    En effet, seulement je débute en programmation et c'est un sujet. Le jours de l'examen c'est un QCM avec un programme à réaliser en 3heures.

  4. #4
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    L'exo est-il à rendre pour 8h30 ?
    En effet, seulement je débute en programmation et c'est un sujet. Le jours de l'examen c'est un QCM avec un programme à réaliser en 3heures.
    Et est-ce que les éléments que j'ai collé te permettent de faire l'exo en moins de 3 heures ?

    [EDIT 08:05]
    Bon vite fait pour 8h30 en changeant le moins de choses possible :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
     
    ######*PROGRAMME PRINCIPAL ######
    print "\nCe programme parcourt toute l'arborescence d'un dossier que vous allez donner";
    print "\nIl va afficher tous les fichiers et les sous-dossiers";
    print "\nPour chaque fichier, on affichera le nom et la taille";
    print "\nPour chaque fichier on recherche la correspondance d'un mot en début de ligne";
    print "\nOn écrit le résultat dans le fichier Rapport.txt\n\n";
     
    # saisie
    print "\n\nQuel dossier ? Entrez le nom complet\n";
    my $D = <STDIN>;
    chomp $D;
     
    print "\n\nEntrez le mot recherché :\n";
    my $M = <STDIN>;
    chomp $M;
     
    print "$D - $M\n";
    open my $FH_OUT, '>:utf8', './Rapport.txt' or die "ouverture impossible de Rapport.txt $!";     # ouverture du fichier rapport
    print $FH_OUT date();
    print $FH_OUT "\nDossier : $D - Mot recherché : $M\n\n";;
     
    # traitement
    if (-d $D) {
    	AnalyseDossier ($D);
    	}
    else {
    	die ("Impossible d'ouvrir le repertoire ",$D);
    	}
    close $FH_OUT; 
    print "\n\nAu revoir !\n\n";
     
    sub AnalyseDossier {
    	# La fonction analyseDossier attend un seul paramètre qui est le nom du dossier qu'on veut analyser
     
    	my $D= shift @_; # On recupere le nom du dossier... 
     
    	# ouverture du dossier $D et creation du descripteur REP
    	opendir (REP,$D) or die ("Impossible d'ouvrir le repertoire ",$D); 
     
    	# On recupere les fichiers du descripteur REP dans @listFile
    	# Notez bien que @listFile peut contenir à la fois des dossiers et des fichiers
    	my @listFile = readdir (REP);
     
    	# on ferme le descripteur
    	close (REP); 
     
    	# Parcours des éléments du dossier $D, ils peuvent $etre des fichiers ou des dossiers
    	foreach (@listFile) {
    		# Création du nom complet :
    		my $nomComplet = $D."/".$_;
     
    		# S'il s'agit d'un fichier on le traite via la fonction de traitement
    		if (-f $nomComplet) {
    			traitement($nomComplet);
    		}
    		# sinon s'il s'agit d'un dossier autre que les dossiers . et ..
    		elsif (-d $nomComplet and $_ ne "." and $_ ne "..") { 
    			# ... on lance un nouvel appel récursif à notre fonction, sur ce dossier là :
    			AnalyseDossier ($nomComplet);
    		} 
    	} # fin de foreach (@listFile)
    } # fin de fonction analyseDossier
     
    sub traitement {
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
    	my $nomComplet = shift @_; # c'est le nom*complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print $FH_OUT "\n\n$nomComplet : $taille\n";
    	open my $FH_IN, "<:utf8", $nomComplet or die "ouverture impossible de $nomComplet $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			print $FH_OUT "$ligne";
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
     
    } # fin de fonction traitement
     
    ###############
    # Date et Heure
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
      return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
    }
    Rapport.txt :
    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
    Le 08/12/2014 à 07:57:52
    Dossier : E:\_DEV\_Essais - Mot recherché : print
     
     
     
    E:\_DEV\_Essais/africanwinners.pl : 2082
     
     
    E:\_DEV\_Essais/ciols_1.pl : 2429
    print "==> Connexion SSH en cours...\n";
    print "Connexion OK\n";
    print(FILE "01 - Vérification des logs installation\n\n");
    print "\n";
    print(FILE "\n02 - Vérification des services\n\n");
    print FILE join("",<RESULT>);
     
    E:\_DEV\_Essais/djbad.pl : 1225
     
     
    E:\_DEV\_Essais/Fichier_1.txt : 252
     
     
    E:\_DEV\_Essais/Fichier_1_22_11_2014.txt : 252
     
     
    E:\_DEV\_Essais/finopat.pl : 3576
    print "\nChargement du fichier contenant la liste des equipements...";
    print "OK\n";
    print "\nChargement du fichier contenant la liste des commandes 'liste.commandes'...";
    print "OK\n";
    print "\nCreation du fichier de log...";
    print "OK\n\n\n";
    print LOG_FILE "Liste des commandes :\n\n";
    print LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n";
    ...
    ...
    C'est un peu cochon, et pas tout à fait ce qui est demandé...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Je suis en formation système et réseau
    Citation Envoyé par dmganges Voir le message
    L'exo est-il à rendre pour 8h30 ?

    Et est-ce que les éléments que j'ai collé te permettent de faire l'exo en moins de 3 heures ?

    [EDIT 08:05]
    Bon vite fait pour 8h30 en changeant le moins de choses possible :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
     
    ######*PROGRAMME PRINCIPAL ######
    print "\nCe programme parcourt toute l'arborescence d'un dossier que vous allez donner";
    print "\nIl va afficher tous les fichiers et les sous-dossiers";
    print "\nPour chaque fichier, on affichera le nom et la taille";
    print "\nPour chaque fichier on recherche la correspondance d'un mot en début de ligne";
    print "\nOn écrit le résultat dans le fichier Rapport.txt\n\n";
     
    # saisie
    print "\n\nQuel dossier ? Entrez le nom complet\n";
    my $D = <STDIN>;
    chomp $D;
     
    print "\n\nEntrez le mot recherché :\n";
    my $M = <STDIN>;
    chomp $M;
     
    print "$D - $M\n";
    open my $FH_OUT, '>:utf8', './Rapport.txt' or die "ouverture impossible de Rapport.txt $!";     # ouverture du fichier rapport
    print $FH_OUT date();
    print $FH_OUT "\nDossier : $D - Mot recherché : $M\n\n";;
     
    # traitement
    if (-d $D) {
    	AnalyseDossier ($D);
    	}
    else {
    	die ("Impossible d'ouvrir le repertoire ",$D);
    	}
    close $FH_OUT; 
    print "\n\nAu revoir !\n\n";
     
    sub AnalyseDossier {
    	# La fonction analyseDossier attend un seul paramètre qui est le nom du dossier qu'on veut analyser
     
    	my $D= shift @_; # On recupere le nom du dossier... 
     
    	# ouverture du dossier $D et creation du descripteur REP
    	opendir (REP,$D) or die ("Impossible d'ouvrir le repertoire ",$D); 
     
    	# On recupere les fichiers du descripteur REP dans @listFile
    	# Notez bien que @listFile peut contenir à la fois des dossiers et des fichiers
    	my @listFile = readdir (REP);
     
    	# on ferme le descripteur
    	close (REP); 
     
    	# Parcours des éléments du dossier $D, ils peuvent $etre des fichiers ou des dossiers
    	foreach (@listFile) {
    		# Création du nom complet :
    		my $nomComplet = $D."/".$_;
     
    		# S'il s'agit d'un fichier on le traite via la fonction de traitement
    		if (-f $nomComplet) {
    			traitement($nomComplet);
    		}
    		# sinon s'il s'agit d'un dossier autre que les dossiers . et ..
    		elsif (-d $nomComplet and $_ ne "." and $_ ne "..") { 
    			# ... on lance un nouvel appel récursif à notre fonction, sur ce dossier là :
    			AnalyseDossier ($nomComplet);
    		} 
    	} # fin de foreach (@listFile)
    } # fin de fonction analyseDossier
     
    sub traitement {
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
    	my $nomComplet = shift @_; # c'est le nom*complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print $FH_OUT "\n\n$nomComplet : $taille\n";
    	open my $FH_IN, "<:utf8", $nomComplet or die "ouverture impossible de $nomComplet $!";     # ouverture du fichier courant en lecture
    	while (my $ligne = <$FH_IN>) {                      # lecture du fichier courant
    		if ( $ligne =~ /^$M/ ) {                          # recherche du motif en début de ligne
    			print $FH_OUT "$ligne";
    		}
    	}
    	close $FH_IN;                                       # la fermeture du handle
     
    } # fin de fonction traitement
     
    ###############
    # Date et Heure
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
      return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
    }
    Rapport.txt :
    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
    Le 08/12/2014 à 07:57:52
    Dossier : E:\_DEV\_Essais - Mot recherché : print
     
     
     
    E:\_DEV\_Essais/africanwinners.pl : 2082
     
     
    E:\_DEV\_Essais/ciols_1.pl : 2429
    print "==> Connexion SSH en cours...\n";
    print "Connexion OK\n";
    print(FILE "01 - Vérification des logs installation\n\n");
    print "\n";
    print(FILE "\n02 - Vérification des services\n\n");
    print FILE join("",<RESULT>);
     
    E:\_DEV\_Essais/djbad.pl : 1225
     
     
    E:\_DEV\_Essais/Fichier_1.txt : 252
     
     
    E:\_DEV\_Essais/Fichier_1_22_11_2014.txt : 252
     
     
    E:\_DEV\_Essais/finopat.pl : 3576
    print "\nChargement du fichier contenant la liste des equipements...";
    print "OK\n";
    print "\nChargement du fichier contenant la liste des commandes 'liste.commandes'...";
    print "OK\n";
    print "\nCreation du fichier de log...";
    print "OK\n\n\n";
    print LOG_FILE "Liste des commandes :\n\n";
    print LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n";
    ...
    ...
    C'est un peu cochon, et pas tout à fait ce qui est demandé...
    Je suis en formation de Système et réseau. Je ne suis pas programmeur à la base. J'esssaie d'acquérir des connaissances en programmation pour valoriser au mieux mon métier.

  6. #6
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bizarre j'ai reçu le mail de notification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ---Citation---
    Je suis en formation de Système et réseau. Je ne suis pas programmeur à la base. J'esssaie d'acquérir des connaissances en programmation pour valoriser au mieux mon métier.:lol:
    ---Fin de la citation---
     
    ***************
     
    Il peut y avoir eu d'autres réponses, mais vous ne recevrez pas de nouvelle notification avant votre prochaine visite du forum.
     
    Cordialement,
    L'équipe Forum du club des développeurs et IT Pro
    Et je ne vois pas ta réponse.

    De plus developpez.com semble être à l'heure d'été

    Ne vois aucun sarcasme dans mes commentaires, je suis resté joueur malgré mon grand âge, et il paraît qu'il est trop tard pour me refaire

    [EDIT] Ça y est, l'heure est corrigée !
    Et vu la réponse, c'était aussi une citation.
    Bonne continuation !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Je verrais ce soir
    Citation Envoyé par dmganges Voir le message
    Bizarre j'ai reçu le mail de notification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ---Citation---
    Je suis en formation de Système et réseau. Je ne suis pas programmeur à la base. J'esssaie d'acquérir des connaissances en programmation pour valoriser au mieux mon métier.:lol:
    ---Fin de la citation---
     
    ***************
     
    Il peut y avoir eu d'autres réponses, mais vous ne recevrez pas de nouvelle notification avant votre prochaine visite du forum.
     
    Cordialement,
    L'équipe Forum du club des développeurs et IT Pro
    Et je ne vois pas ta réponse.

    De plus developpez.com semble être à l'heure d'été

    Ne vois aucun sarcasme dans mes commentaires, je suis resté joueur malgré mon grand âge, et il paraît qu'il est trop tard pour me refaire

    [EDIT] Ça y est, l'heure est corrigée !
    Et vu la réponse, c'était aussi une citation.
    Bonne continuation !
    Je suis au travail. J'essaierais de voir cela ce soir.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut edition du fichier texte
    Citation Envoyé par dmganges Voir le message
    Bizarre j'ai reçu le mail de notification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ---Citation---
    Je suis en formation de Système et réseau. Je ne suis pas programmeur à la base. J'esssaie d'acquérir des connaissances en programmation pour valoriser au mieux mon métier.:lol:
    ---Fin de la citation---
     
    ***************
     
    Il peut y avoir eu d'autres réponses, mais vous ne recevrez pas de nouvelle notification avant votre prochaine visite du forum.
     
    Cordialement,
    L'équipe Forum du club des développeurs et IT Pro
    Et je ne vois pas ta réponse.

    De plus developpez.com semble être à l'heure d'été

    Ne vois aucun sarcasme dans mes commentaires, je suis resté joueur malgré mon grand âge, et il paraît qu'il est trop tard pour me refaire

    [EDIT] Ça y est, l'heure est corrigée !
    Et vu la réponse, c'était aussi une citation.
    Bonne continuation !
    Bonjour,

    J'aimerais savoir comment avez vous réussi à éditer et générer le fichier texte dans le cas de mon nouveau script

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use autodie; 
     
    ######*PROGRAMME PRINCIPAL ######
    print "\nCe programme parcourt toute l'arborescence d'un dossier que vous allez donner\n";
    print "Il va afficher tous les fichiers et les sous-dossiers\n";
    print "Pour chaque fichier, on affichera le nom et la taille\n";
    print "Pour chaque fichier on recherche la correspondance d'un mot en début de ligne\n";
    print "On écrit le résultat dans le fichier Rapport.txt\n\n"; 
     
    # saisie
     
    print "\n\nQuel dossier ? Entrez le nom complet\n";
    my $D = <STDIN>;
    chomp $D;
     
    print "\n\nEntrez le mot recherché :\n";
    my $M = <STDIN>;
    chomp $M;
     
    print "$D - $M\n";
    open my $FH_OUT, '>:utf8', './Rapport.txt';  # ouverture du fichier rapport
    print $FH_OUT date();
    print $FH_OUT "\nDossier : $D - Mot recherché : $M\n\n";;
     
    # traitement
     
    if (-d $D) {
    	AnalyseDossier ($D);
    	}
    else {
    	die ("Impossible d'ouvrir le repertoire ",$D);
    	}
    close $FH_OUT; 
    print "\n\nAu revoir !\n\n";
     
    sub AnalyseDossier {
     
    	# La fonction analyseDossier attend un seul paramètre qui est le nom du dossier qu'on veut analyser
     
    	my $D= shift; # On recupere le nom du dossier... 
     
    	# ouverture du dossier $D et creation du descripteur REP
     
    	opendir (my $rep, $D) or die ("Impossible d'ouvrir le repertoire ",$D); 
     
    	# On recupere les fichiers du descripteur REP dans @listFile
    	# Notez bien que @listFile peut contenir à la fois des dossiers et des fichiers
     
    	my @listFile = grep !/^\.{1,2}$/o, readdir ($rep);
     
    	# on ferme le descripteur
     
    	closedir ($rep); 
     
    	# Parcours des éléments du dossier $D, ils peuvent $etre des fichiers ou des dossiers
     
    	foreach (@listFile) {
    		# Création du nom complet :
    		my $nomComplet = $D."/".$_; 
     
    		# S'il s'agit d'un fichier on le traite via la fonction de traitement
    		if (-f $_) {
    			traitement($nomComplet);
    			next; 
    		}
    		# sinon s'il s'agit d'un dossier autre que les dossiers . et ..
     
    		if (-d $_)  { 
    			# ... on lance un nouvel appel récursif à notre fonction, sur ce dossier là :
    			AnalyseDossier ($nomComplet);
    			next; 
    		} 
    	} # fin de foreach (@listFile)
    } # fin de fonction analyseDossier
     
    sub traitement {
     
    	# Ici on se contente d'afficher le nom du fichier et sa taille
     
    	# On récupère le paramètre passé à la fonction traitement :
     
    	my $nomComplet = shift @_; # c'est le nom complet du fichier
     
    	my $taille = -s  ($nomComplet);
     
    	print $FH_OUT "\n\n$nomComplet : $taille\n";
    	open my $fh_in, "<:utf8", $nomComplet or die "ouverture impossible de $nomComplet $!";  # ouverture du fichier courant en lecture
    	while ( <$fh_in> ) {     # lecture du fichier courant
    		if ( /^$M/ ) {       # recherche du motif en début de ligne
    			print $FH_OUT $_;
    		}
    	}
    	close $fh_in;  # la fermeture du handle
     
    } # fin de fonction traitement
     
    ###############
    # Date et Heure
     
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
     
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
      return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
    }

  9. #9
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut Les discussions existent déjà sur d'autres forums
    Citation Envoyé par laisskamal
    J'aimerais savoir comment avez vous réussi à éditer et générer le fichier texte dans le cas de mon nouveau script
    Simplement comme toi en faisant des copier/coller

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par dmganges Voir le message

    Puis tu nous fais le même crique avec :
    Que le grand cric te croc :

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut

    Bonjour,

    Dans ce cas là, je voudrais que vous ne répondiez plus à mes questions.

    Cordialement,




    A la base, je n'ai pas changé les fonctionnalités de votre code (donc si elles ne répondent pas à votre problème, c'est a vous de le modifier pour quelque chose de plus adapté. Typiquement, j'aurais choisi deux structures indépendantes, une pour les abonnés, et une pour la base des DVDs, si j'avais écrit le code), j'ai juste gardé la structure de votre solution et
    - découpé le code en parties indépendantes, ce qui le rend plus lisible
    - viré les globales et conservé la seule globale qui a un sens, la DVDthèque (noter aussi que si j'écrivais le code, mes subs n'auraient aucune globale, je passerais la DVDtheque par référence en argument)

    Si j'avais eu a résoudre le problème, j'aurais commencé par poser un modèle plu réaliste:
    my %abonnes = ( "Guillaume" => {"emprunt" => [{"titre" => 25, "retour" => "2-12-2014"},
    {"titre" => 27, "retour" => "18-12-2014"},],
    "inscrit" => "1-1-2010"},
    "Maxime" => {"emprunt" => [{"titre" => 2, "retour" => "7-1-2015"},],
    "inscrit" => "19-7-2012"},
    "Anne" => {"emprunt" => [],
    "inscrit" => "22-6-2013"},
    "Michel" => {"emprunt" => undef,
    "inscrit" => "12-9-2012"}, );
    et
    my %DVD = ( 1 => {"titre" => "Money", "interprete" => "Pink Floyd", "Pistes" => 8},
    2 => {"titre" => "Abbey Road", "interprete" => "Beatles", "Pistes" => 9},
    ...
    );

    Ensuite, il faut voir si ce genre de chose est bien pensé, ou si c'est la base de DVDs qui doit avoir un champ emprunteur et un champ retour par DVDs plutôt qu'avoir cela au niveau des users (chaque système a ses avantages et ses inconvénients).

  12. #12
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par vidici Voir le message
    Que le grand cric te croc :
    Voila de l'humour que j’apprécie

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 18/05/2006, 16h18
  2. Ouvrir un fichier en fonction d'un autre
    Par philippef dans le forum Langage
    Réponses: 7
    Dernier message: 05/03/2006, 17h42
  3. Script de suppression de fichiers en fonction de la date
    Par yellow174 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 06/02/2006, 11h57
  4. Réponses: 2
    Dernier message: 03/06/2005, 11h01
  5. Fichier de fonctions globales
    Par PEM dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/07/2002, 21h35

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