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 :

lecture ligne par ligne de 2 fichiers simultanément


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut lecture ligne par ligne de 2 fichiers simultanément
    Bonjour,

    Pour l'administration d'un serveur de donnée, je suis en train d'écrire un script perl qui :
    1. Récupère le chemin absolu des fichiers d'un répertoire dans un fichier path.txt
    2. Récupère la date de derniere modif de chaque fichier dans un fichier dates.txt
    3. Lecture de la ligne1 du fichier path.txt, lecture de la ligne1 du fichier dates.txt
    4. Exécution d'une commande touch pour replacer la la date de derniere modification de chaque fichier.

    Mais voila, je n'arrive pas à récupérer la ligne1 de path.txt avec la ligne1 de dates.txt, stocker les 2 valeurs dans 2 variables et m'en servir pour ma commande touch.
    Je précise que la ligne2 de path.txt doit aller avec la ligne2 de dates.txt --> touch, etc...

    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
    #ouverture des fichiers path et dates
    open(PATH, "/root//path.txt") || die ("Erreur d\'ouverture de PATH");
    open(DATES, "/root//dates.txt") || die ("Erreur d\'ouverture de DATES");
     
    my $i = 0;
    my $j = 0;
    while($chemin_absolu = <PATH>){
    	while($saved_dates = <DATES>){
    		if ($i == $j){
    			$cmd_path_date = "touch -m -t $saved_dates $chemin_absolu";
    			print $cmd_path_date ."\n";
    			system $cmd_path_date;
    		}
    		$j++;
    	}
    	$i++;
    }
     
    close(DATES);
    close(PATH);
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Si tes fichiers ne sont pas trop gros, tu peux utiliser des tableaux.

    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
    #ouverture des fichiers path et dates
    open(PATH, "/root//path.txt") || die ("Erreur d\'ouverture de PATH");
    open(DATES, "/root//dates.txt") || die ("Erreur d\'ouverture de DATES");
     
    # stockage des informations dans 2 tableaux indexés
    my @path = <PATH>;
    my @dates = <PATH>;
     
    # fermeture des fileshandles
    close PATH;
    close DATES;
     
    # comparaison des données
    # si les fichiers ont le même nombre de lignes 
    for my $i (0..$#path){
    	$path[$i] vs $dates[$i];
     
    }

  3. #3
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Merci.
    J'avais pensé à tout stocker dans un tableau mais c'est pas trop possible. J'ai environ 35 000 valeurs à stocker (x2) !!!

    J'ai résolu mon problème en fouillant toute la soirée dans cette section.

    Voila un bout de code pour info :
    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
    #ouverture des fichiers path et dates
    open(PATH, "/root/path.txt") || die ("Erreur d\'ouverture de PATH");
    open(DATES, "/root/dates.txt") || die ("Erreur d\'ouverture de DATES");
     
    while(<PATH>){
    	my $chemin_absolu = $_;
    	$chemin_absolu =~ s/\'/\\\'/g;
    	$chemin_absolu =~ s/^\s+//;
    	$chemin_absolu =~ s/\s+$//;
    	$chemin_absolu =~ s/ /\\ /g;
    	chomp $chemin_absolu;
    	my $saved_dates  = <DATES>; # lecture et stockage dans variable de la meme ligne dans DATES que dans PATH
    	chomp $saved_dates;
    	$cmd_path_date = "touch -t $saved_dates $chemin_absolu"; # commande qui rapplique les bonnes dates de modif
    	print $cmd_path_date ."\n";
    	system $cmd_path_date;
    }
     
    close(DATES);
    close(PATH);
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Tu sais que tu pouvais récupérer les dates de fichier en Perl avec stat

  5. #5
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Ah non, je savais pas.
    J'ai plus de compétences en shell... mais faut bien débuter quelque part !
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    tu peux regarder dans la FAQ (sur les fichiers)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/07/2010, 21h16
  2. Lecture d'un fichier ligne par ligne
    Par kabouns dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 15h46
  3. Réponses: 20
    Dernier message: 09/02/2006, 09h45
  4. [lecture d'un fichier] ligne par ligne
    Par pitit777 dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 11h22
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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