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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    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 Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 452
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    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 Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 452
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    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 Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 452
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    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";
    }

+ 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