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

Shell et commandes GNU Discussion :

Chercher dans un fichier des intervalles de date


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut Chercher dans un fichier des intervalles de date
    Bonjour,

    je sèche sur le problème suivant:
    1) j'ai un fichier de mesures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    2013/08/07 1
    2013/08/07 3
    2013/08/26 2
    2013/08/27 7
    2013/09/01 3
    2013/09/10 6
    2013/09/11 6
    2013/10/13 1
    ....
    2) A partir de la première date 2013/08/07, je dois trouver les dates:
    2013/08/07 plus ou moins 30/31 jours

    c'est à dire la prochaine date qui se rapproche le plus du 2013/09/07.

    Une fois cette date trouvée, je dois rechercher la date suivante + ou - 60/62 jours. Et ce jusqu'à lla fin du fichier.

    3) pour la dernière date je ne la prend que si elle est dans un intervalle admissible
    etc....

    L'intervale pourrait être paramétrable + ou - 5 jours par exemple pour qui je puisse avoir une date car il n'est pas sur qu'il y ait une date dans l'intervalle 30/31 jours.

    PS: ne pas tenir compte des années bisextiles (le client est roi mais pas à ce point là ).

    Je fais ce calcul pour automatiser la génération de graphiques et ne pas avoir des dates qui se touchent sur l'axe des X a tel point que celà devienne illisible. Par GNUPLOT je n'y arrive pas et je ne veux pas me lancer dans un délire GNUPLOT que je ne maitrise pas.

    Merci beaucoup pour votre aide et vos idées !

    Edit: j'avais fais une erreur dans une date. Les dates sont bien triées dans le fichier

  2. #2
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Rebonjour,

    devant l'affluence extrème de suggestions j'ai décidé de passer outre le souhait du client.

    Je vais me caler sur la première date du mois suivant et ce de mois en mois.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,
    Juste un point, dans un forum, il ne faut s'attendre à avoir une réponse immédiate...
    Bon, vu que tes date sont triées, voici une idée de comment faire:
    1) Tu calculs toutes tes dates par rapport à ta date initiale qui tu mets dans un fichier temporaire:
    Donc date+1mois, date+2mois,...(exemple calcul date sous linux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ date --date="2013/08/07 1 month" "+%Y/%m/%d"
    2013/09/07
    $ date --date="2013/08/07 2 month" "+%Y/%m/%d"
    2013/10/07
    $ date --date="2013/08/07 3 month" "+%Y/%m/%d"
    2013/11/07
    2) Tu tris tes 2 fichiers (ton fichier de point et ton fichier de date précédemment créé) que tu redirige dans un autre fichier temporaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort fichier_de_point fichier_temporaire_de_date >fichier_temp
    3) maintenant, dans le fichier_temp, il ne te restera qu'a chercher les lignes qui ne contiennent que la date et à prendre la date de la ligne du dessous qui sera la date en excédent la plus proche de ta date calculé voir la date calculée elle-même.

  4. #4
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Bonjour, et merci beaucoup pour ta réponse que je vais étudier.

    Rassures toi, je n'attendais pas une réponse immédiate (c'est plutot le client....). C'est pour ça que j'ai indiqué que je changeais mon fusil d'épaule.

    Je vais donc tester ta proposition.

    Encore merci !!!!

  5. #5
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Rebonjour,

    je viens de tester. Ta solution est très astucieuse !

    Mais par nature, le client est toujours perfide. Et en particulier dans le cas suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    2013/10/07 1
    2013/10/08
    2013/10/14 1
    Le client va me dire c'est bien d'avoir choisi le 2013/10/14 comme balise pour l'axe des X, mais le 2013/10/07 aurait été mieux car plus proche de la date idéale du 2013/10/08.

    Rassures toi, je ne critique pas ta solution que je trouve très bonne.

    je vais calculer la différence de jours entre les dates:

    D - D-1
    D+1 - D

    Merci

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Forcer le recadrage avec gnuplot n'est pas sorcier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plot x*x-10
    plot [0:10] x*x-10
    plot [0:10][0:] x*x-10
    Le premier cas est autodimensionné
    Le second contraint les x.
    Le troisième contraint les x et le minimum des y.


    En ce qui concerne les dates, plutôt que de formater en année, mois, jour, le formattage en nombre de secondes depuis l'epoch permettra facilement de savoir laquelle est la plus près.

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 03/03/2014, 16h16
  2. Réponses: 3
    Dernier message: 08/09/2008, 23h55
  3. [VBA-E] Chercher dans un fichier en hexa
    Par dev_php51 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2008, 11h30
  4. [Transact SQL] Comparer des intervales de dates
    Par jowsuket dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/05/2008, 11h25
  5. [VB.NET] ecrire dans un fichier des balise HTML et autres
    Par mael94420 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/03/2007, 13h34

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