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

Programmation et administration système Perl Discussion :

Lecture de fichier à la chaine


Sujet :

Programmation et administration système Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut Lecture de fichier à la chaine
    Bonjour,

    Je m'explique, dans un but d'éffectuer des statistiques il me faut ouvrir plusieurs fichiers correspondant à des dates.

    Les fichiers sont stockés dans le répertoire /racine/année/mois/jour.

    L'utilisateur qui execute le programme de statistique doit choisir l'intervalle de temps entre lequel il veut effectuer ces statistiques.

    Il saisi l'intervalle sous forme (debut) 12/02/2008 (à) 10:00:00 (heure)
    idem pour la fin.

    Je dois donc ouvrir tous les fichiers compris dans l'intervalle.

    Les fichiers correspondant n'existent pas forcément donc il me faut outrepasser ça
    Et puis biensure après le 31/30 on change de mois et après décembre on change d'année

    ... C'est dure ^^

    Voilà ce que j'ai écrit comme fonction après la saisie utilisateur :

    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
    while ($annee_d != $annee_f or $mois_d != $mois_f or $jour_d != $jour_f) {
    	print "entrer dans le while\njour = $jour_d\nmois: $mois_d\nannee: $annee_d\n";
    	if (chdir '/donnees/SaveDoc/ProjetC/ProjetC/' . "$annee_d" . '/' . "$mois_d" == 0) {
    		print "dossier ouvert\n";
    		if (open (FIC, '>' . "$jour_d") == 0) {
    			print "fichier $jour_d ouvert dans le repertoire /$annee_d/$mois_d\n";
    		}
    		else {
    			if ($jour_d < 31) {
    				$jour_d++;
    			}
    			elsif ($mois_d == 12 and $jour_d == 31) {
    				$jour_d == 01;				
    				$mois_d == 01;			
    				$annee_d++;
    			}
    			elsif ($jour_d == 31) {
    				$jour_d = 01;
    				$mois_d++;
    			}
    			else {
    				die "Oula grosse couillasse! ! ! :)";
    			}
    		}
    	}
    	else {
    		if ($mois_d == 12) {
    			$mois_d = 01;
    			$annee_d++;
    		}
    		else {
    			$mois++;
    		}
    	}
    }
    Explication annexe : annee_d , mois_d, jour_d correspondent a la saisie utilisateur pour le depart des statistiques ex 24/02/2008 annee_d = 2008 mois_d = 02 jour_d = 24

    annee_f, mois_f, jour_f correspondent a la saisie utilisateur pour la fin des statistiques sur le meme model.

    Une autre chose les jour < 10 sont sous la forme 01 -02 -03 ....
    est ce que quand je fais jour++ j'obtiendrai un resultat de la forme 0x.

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    La comme ca a froid, je penserai plus a utiliser le module "File::Find", parser les dates, qq chose pour convertir les date en nombre de secondes, et les comparerer avec la date entrée convertie en seconde.
    Z.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Je ne comprend pas trop le rôle de la manip que tu as cité :

    qq chose pour convertir les date en nombre de secondes, et les comparerer avec la date entrée convertie en seconde.

  4. #4
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Avec un peu plus de details (code non verifié, jsute pour te donner une idé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
    17
    18
    19
    20
    use File::Find;
    my @fichiers;
    my $chemin="./";
     
    #tu recuperes les fichiers de ton repertoires
    find sub{
    	push @fichiers, "$File::Find::name" if (-f $File::Find::name);
    	},$chemin;
     
    my $debut_temps = converti_en_secondes($debut_temps_saisie);
    my $fin_temps = converti_en_secondes($fin_temps_saisie);
     
    my @bons_fichiers;
    foreach my $fichier_courant (@fichiers){
    	my $temps = converti_temps_fichier_secondes($fichier_courant);
    	if ( ($temps <= $fin_temps) && ($temps >= $debut_temps) {
    		push @bons_fichiers, $fichier_courant;
    		}
    	}
    #et tu as tes bon fichiers dans @bons_fichiers
    Ca peut etre encore plus simple en integrant la condition directement dans la fonction qui recupère la liste de fichier.
    Z.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Nikel l'exemple c'est clair comme de l'eau de roche

    J'essaie ça ce week end et je te dit si tu as vu juste

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/01/2007, 12h30
  2. lecture sur fichier et chaine de caractères
    Par Aethis dans le forum Langage
    Réponses: 3
    Dernier message: 10/07/2006, 11h27
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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