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

VB.NET Discussion :

Rech. Algo pour comparer groupes de date et concaténation des données associées


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Rech. Algo pour comparer groupes de date et concaténation des données associées
    Bonjour à tous,

    Comme mon titre, assez long je reconnais, l’annonce, je suis à la recherche d'un algo ou quelque chose qui le ferait déjà tout seul (on sait jamais), pour comparer des bloc de dates contenant des donnés. le tout stocker actuellement dans une collection de dictionnary(Date,Double). Chaque Keys de la collection représente un fichier par le dictionnary associé.

    Exemple:

    1er fichier
    Key Donnée
    13/10/2010 15:50:00 54,48
    13/10/2010 16:00:00 54,49
    13/10/2010 16:10:00 54,30
    13/10/2010 16:20:00 54,50
    13/10/2010 16:30:00 54,52
    13/10/2010 16:40:00 54,54
    13/10/2010 16:50:00 54,48
    13/10/2010 17:00:00 54,52
    13/10/2010 17:10:00 54,55
    etc..

    2eme fichier
    Key Donnée
    13/10/2010 17:20:00 54.50
    13/10/2010 17:30:00 54.52
    13/10/2010 17:40:00 54.57
    13/10/2010 17:50:00 54.51
    13/10/2010 17:60:00 54.48
    13/10/2010 18:00:00 54.45
    13/10/2010 18:10:00 54.40
    etc...

    3eme fichier
    Key Donnée
    13/10/2010 15:00:00 54.50
    13/10/2010 15:10:00 54.52
    13/10/2010 15:20:00 54.57
    13/10/2010 15:30:00 54.51
    13/10/2010 15:40:00 54.48
    13/10/2010 15:50:00 54,48
    13/10/2010 16:00:00 54,49
    etc...

    4eme fichier
    Key Donnée
    13/12/2010 18:00:00 54.50
    13/12/2010 18:10:00 54.52
    13/12/2010 18:20:00 54.57
    13/12/2010 18:30:00 54.51
    13/12/2010 18:40:00 54.48
    13/12/2010 18:50:00 54.45
    13/12/2010 19:00:00 54.40
    etc...

    Voila un exemple.

    Ce que je souhaite c'est qu'il me reste donc uniquement 2 fichiers
    Le 4éme étant complètement en hors limite des autres cela en fait un
    et le 2éme serait une concaténation des 3 1er en éliminant les redondances.

    Je précise que je connais la date de début et de fin de chaque fichier.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    j'ai rien compris de ce que tu veux exactement

    si tu veux merger des dictionnaires tu peux faire du linq to object (.union ou autre from, dispo depuis fx3.5)
    mais le mieux vu que tu remplies les dictionnaires, d'en avoir qu'un rempli intelligemment à la lecture des fichiers (sauf si tu as besoin à un moment des dico distinct)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Je vais essayer d’être plus clair, mais d'une c'est pas simple, et d'autre je sais pas forcement trouver les mots.

    A la base j'ai des fichiers "*.csv" contenant 4 lignes d’entête pour me permettre de savoir ce que contient le fichier (nom du site, type de mesure, date de début date de fin etc...).
    Ensuite j'ai toutes les données avec la date complète puis la données de mesures associé.
    Donc:
    mon entête1
    mon entête2
    mon entête3
    mon entête4
    12/05/2011 15:14:00;54.48
    12/05/2011 15:24:00;54.50
    etc....

    J'ai plusieurs fichiers comme cela.

    Je fait mon tri avec les entêtes pour garder ceux qui m’intéresse (le nom du site et le type de mesure que j'ai besoin)

    Une fois mon 1er tri il me reste les fichiers de l'exemple que j'ai cité sur mon 1er post.

    Ensuite il faut que je fasse le tri dans les fichiers qu'il me reste en fonction des dates.

    En imaginant que la plage de date d'un fichier soit identique OU contenu dans un des autres il est inutile que je le garde. Il m'en reste donc qu'un sur les 2 en gardant celui avec la plage la plus importantes.

    En imaginant que la plage de date d'un fichier soit contiguë à un autre, on ajoute donc cette plage à l'autre, pour n'en former plus qu'un seul

    En imaginant que la plage soit complètement différent des autres on le garde donc en tant que nouvelle plage de dates.

    A la fin on a donc une ou plusieurs plage de date contiguë. L'utilisateur sélectionnera la plage qui lui conviens afin d'effectuer des statistiques dans cette plage.

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Si une plage A est contenue dans une plage B, que fais-tu des mesures de A faites à des temps différents de celles de B (à temps identique, j'ai compris que tu gardais la mesure de B) ?

    Dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       |t1---------PlageA-------------t3|
                               |t2---------PlageB-------------t4|
    Que fait-on :
    • une plage résultante C de t1 à t4 ?
    • ou un autre traitement ?
    Pour l'intervalle [t2,t3], gardes-tu les mesures de A ou celles de B ou celles de la plage la plus grande ?

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       |t1---------PlageA-------------t3|
                               |t2---------PlageB-------------t4|
    Que fait-on :
    • une plage résultante C de t1 à t4 ?
    • ou un autre traitement ?
    Dans ce cas il faut ajouter les élément de la plage B manquant à la plage A pour en faire une seule.
    Les éléments commun seront obligatoirement les mêmes (Même date/heure et même valeur de mesures), La partie commune de la plage B est donc inutile.

    Je commence a cerner le problème mais mon principal souci c'est de déterminer à partir de quand je concidére que l’intervalle entre les fichiers constitue un nouveau groupe.
    Car dans le même fichier il peut y avoir des trous. Les mesures provenant de panneau solaire, la nuit cela ne produit rien, dans ce cas dans le fichier ont aura

    15/10/2011 21:50:00 54.48
    15/10/2011 22:00:00 54.50
    15/10/2011 22:10:00 0 //- - - - - - Période de nuit
    16/10/2011 07:30:00 0 //- - - - - - 0 inséré juste avant le retour de l’énergie
    16/10/2011 07:30:01 54.39
    16/10/2011 07:40:01 54.47

    etc

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    On peut créer des listes contenant des objets avec ces données : DateTime, Mesure, FinPlage, info_en-tête

    • On trie par DateTime.
    • Parmi les enregistrements de même DateTime, on ne laisse que celui correspondant à la plage la plus grande.
    • Ensuite, on définit la plage courante avec Debut=Objet[0].DateTime et Fin=Objet[0].Fin
    • Tant que Objet[i].DateTime<=Fin : faire Fin=Max(Fin,Objet[i].Fin) et i=i+1
    • si i<Liste.count, on a Objet[i].DateTime>Fin et on enregistre la plage en cours et on en crée une nouvelle (Debut=Objet[i].DateTime et Fin=Objet[i]) et on boucle sur le "tant que".

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Est-ce que cette approche serait acceptable ?

    - prendre tous les fichiers dont les dates correspondent à la plage de dates voulue
    - lire toutes les entrées de tous ces fichiers qui sont dans la plage de dates voulue
    - éliminer les doublons

    Autrement dit, si tu as un cas comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A ----[----------------]----
    B -------[----]-------------
    Les données de B seront quand même prises en compte. Il me semble que ce ne serait pas un problème du moment qu'on élimine les doublons, non ? En tous cas ça simplifie l'approche du problème...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Pas très clair ton histoire... en tous cas j'ai pas du tout compris ce que tu voulais faire. Essaie d'être plus précis

Discussions similaires

  1. [VxiR2] Webi : récupérer la date de rafraîchissement des données
    Par Yochi42 dans le forum Webi
    Réponses: 10
    Dernier message: 05/07/2012, 11h29
  2. Macro pour rechercher un fichier xls et importer des données
    Par ThSPB dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/03/2011, 16h03
  3. Date de modification des données d'une table
    Par DemonSurf dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/09/2009, 14h40

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