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

Documents Java Discussion :

Afficher l'heure associée à une activité depuis un csv.


Sujet :

Documents Java

  1. #21
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Je crois que j'ai trouvé en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    edate.getValue().entrySet().stream().sorted(Map.Entry.comparingByKey())
    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    edate.entrySet().stream().sorted(Map.Entry.comparingByKey())
    Mais maintenant se présente un autre soucis, car il faudrait que le csv ait des champs null ou à zéro pour les dates déjà trouvées.
    Mon csv ressemble à ça maintenant:
    date,heure,Luminosite_Chambre,Luminosite_Exterieure,Luminosite_Hall_Entree,Luminosite_SDB,Luminosite_Salon,Presence_Chambre,Presence_SDB,Presence_Salon,Temperature_Chambre,Temperature_Salon
    2017-03-13,09:07:29,0,0,1,0,0,0,0,0,0,0
    09:07:36,0,0,0,1,0,0,0,0,0,0
    09:07:51,0,0,0,1,0,0,0,0,0,0
    09:08:06,1,0,0,0,0,0,0,0,0,0
    09:23:59,0,0,1,0,0,0,0,0,0,0
    09:24:14,0,0,0,0,0,0,1,0,0,0
    2017-03-14,09:08:21,1,0,0,0,0,0,0,0,0,0
    09:08:29,0,0,1,0,0,0,0,0,0,0
    09:08:50,0,0,0,0,0,1,0,0,0,0
    09:08:51,0,0,0,1,0,0,0,0,0,0
    09:08:52,0,0,0,0,0,0,1,0,0,0
    2017-03-15,09:07:29,0,0,0,0,1,0,0,0,0,0
    09:07:36,1,0,0,0,0,0,0,0,0,0
    09:07:45,0,0,0,0,0,0,0,1,0,0
    09:07:53,0,0,0,0,0,0,0,0,0,1
    09:07:59,0,0,1,0,1,0,0,0,0,0
    09:08:06,0,0,0,1,0,0,0,0,0,0
    09:08:13,0,0,0,0,0,0,0,0,1,0
    09:08:21,0,0,0,1,0,0,0,0,0,0
    09:08:29,0,0,0,0,1,0,0,0,0,0
    09:08:36,1,0,0,0,0,0,0,0,0,0
    Donc il est faussé pour les lignes où il n'y a pas de date au moment de sa lecture par C3js.

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il n'y a pas de méthode entrySet() dans la classe Map.Entry (le type de edate). Comme je l'ai indiqué dans mon code, cette edate.getValue().entrySet() (c'est la valeur de l'entry qui est une Map, donc qui a la méthode entrySet).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #23
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Salut,
    Désolé, je n'avais pas vu la modification que tu avais faite dans ton dernier code.
    Vois tu un moyen faire en sorte que le champ date ne fausse pas le format du csv?
    Merci.

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gadje Voir le message
    Vois tu un moyen faire en sorte que le champ date ne fausse pas le format du csv?
    C'est-à-dire ? Un csv, Comma-Separated Values, c'est un fichier où les données sont séparées par des virgules, éventuellement encadrées par des ". Il n'y a ni double-quote ni virgule dans la date formatée dd/MM/yyyy.

    [Edit]Je n'avais pas vu ton autre post : je comprends mieux. Tu parles du problème des lignes où la date n'apparait pas.

    Le problème vient de la position de .peek(edate -> out.print(edate .getKey().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ",")) qui est en dehors du forEach suivant.
    Il suffit de le déplacer (enfin plus précisemment de déplacer le out qui y est fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    map.entrySet().stream().sorted(Map.Entry.comparingByKey())
    		 //.peek(edate  -> out.print(edate .getKey().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ",")) // date,
                      .forEach(edate -> edate.entrySet().stream().sorted(Map.Entry.comparingByKey()) 
                              .peek(etime->  out.print(edate .getKey().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "," + etime.getKey().format(DateTimeFormatter.ofPattern("HH:mm:ss")) + ",")) // time,
                                                .forEach(etime-> 
                                                                                    out.println(equipements.stream()
    										.map(eq -> etime.getValue().getOrDefault(eq, 0))
    										.map(String::valueOf)
    				                                                .collect(Collectors.joining(","))));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup, maintenant, il faut que je vois comment exploiter tout ça dans C3js.

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si la finalité est d'utiliser les données dans C3js, pourquoi ne pas générer directement du JSon ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #27
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    ... Excellente question !!!
    Ben à vrai dire, je ne sais pas. J'étais parti de fichier log au format texte brut pour en faire des csv.
    Penses tu que ce serait plus simple ?
    Quel pourraient en être les avantages et inconvénients ?

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    L'avantage c'est de générer directement ta page web (en jsp ou servlet) (je veux dire générer directement le script de paramétrage du chart), ou encore de générer un json que tu peux directement exploiter en ajax dans ta page web pour modifier ton chart dynamiquement. Le json sera de plus facilement manipulable en JavaScript, y compris pour faire des filtres si nécesaire.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #29
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Houulaaa !!!
    J'ai bien l'impression que ce n'est pas dans mon champ de compétences.
    J'ai déjà du mal, comme tu as pu le constater, avec du csv.
    Par ailleurs, je ne connais ni JSP, ni servlet, ni Ajax, voila qui fait bonne mesure.

  10. #30
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu le fais avec quelle techno ton site web ? Même si tu fais un site static tu peux toujours générer les pages en Java (c'est simplement écrire dans un fichier ce que tu taperais à la main). Générer du JSon en Java (avec une API bien sûr), c'est trivial (dès lors qu'on sait lire une doc).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #31
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    J'aurai bien besoin de ton expertise sur les choix que j'ai fais.
    En fait tout se fait en plusieurs étapes
    1°- Parsing des log KNX au format texte brut comme celui ci :
    jeudi 16 mars 2017, 16:36:32 (UTC+0100)
    Write from 1.1.39 to 5/4/0: 0C 1A
    jeudi 16 mars 2017, 16:36:34 (UTC+0100)
    Write from 1.1.39 to 5/1/3: FF
    jeudi 16 mars 2017, 16:36:34 (UTC+0100)
    Write from 1.1.39 to 5/1/4: 69
    jeudi 16 mars 2017, 16:36:43 (UTC+0100)
    Write from 1.1.32 to 5/1/2: 2C 61
    jeudi 16 mars 2017, 16:36:44 (UTC+0100)
    Write from 1.1.30 to 5/1/1: 04 B0
    jeudi 16 mars 2017, 16:36:49 (UTC+0100)
    Write from 1.1.39 to 5/1/3: FD
    jeudi 16 mars 2017, 16:36:49 (UTC+0100)
    Write from 1.1.39 to 5/1/4: 67
    jeudi 16 mars 2017, 16:36:52 (UTC+0100)
    Write from 1.1.39 to 5/4/1: 0C 24
    jeudi 16 mars 2017, 16:37:04 (UTC+0100)
    Write from 1.1.39 to 5/1/3: FF
    jeudi 16 mars 2017, 16:37:04 (UTC+0100)
    Write from 1.1.39 to 5/1/4: 69
    jeudi 16 mars 2017, 16:37:07 (UTC+0100)
    Write from 1.1.103 to 4/0/0: 00 3D 12 88
    jeudi 16 mars 2017, 16:37:13 (UTC+0100)
    Write from 1.1.32 to 5/1/2: 2C 74
    jeudi 16 mars 2017, 16:37:14 (UTC+0100)
    Write from 1.1.30 to 5/1/1: 04 B0
    jeudi 16 mars 2017, 16:37:18 (UTC+0100)
    Write from 1.1.31 to 5/1/0: 1C 1A
    jeudi 16 mars 2017, 16:37:19 (UTC+0100)
    Write from 1.1.39 to 5/1/3: FD
    jeudi 16 mars 2017, 16:37:19 (UTC+0100)
    Write from 1.1.39 to 5/1/4: 69
    jeudi 16 mars 2017, 16:37:32 (UTC+0100)
    Write from 1.1.39 to 5/4/0: 0C 1A
    jeudi 16 mars 2017, 16:37:34 (UTC+0100)
    Write from 1.1.39 to 5/1/3: FF
    Via du code en java, cela me génère un fichier pour chaque type d'équipement domotisé, (Portes.csv, Fenêtres.csv, Eclairages.csv, Volets.csv, ...) comme ceci :
    idIndex,date,heure,participant,adresseParticipant,equipement,adresseBus,valeur
    542,16-03-2017,17:07:45,Capteur_Hall,1.1.30,Eclairage_Entree_Centre,1/0/0,01
    577,16-03-2017,17:09:02,Capteur_Hall,1.1.30,Eclairage_Entree_Centre,1/0/0,00
    3153,16-03-2017,19:25:20,Indefini,1.1.33,Eclairage_Variation_Salon_Centre,1/2/1,01
    3154,16-03-2017,19:25:20,Indefini,1.1.33,Eclairage_Variation_Salon_Centre,1/2/1,00
    3158,16-03-2017,19:25:26,Indefini,1.1.33,Eclairage_Variation_Salon_Centre,1/2/1,09
    3160,16-03-2017,19:25:26,Indefini,1.1.33,Eclairage_Variation_Salon_Centre,1/2/1,08
    3162,16-03-2017,19:25:29,Indefini,1.1.34,Eclairage_Salon_Cuisine,1/0/3,01
    3206,16-03-2017,19:26:50,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,01
    3208,16-03-2017,19:26:51,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,00
    3216,16-03-2017,19:26:54,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3218,16-03-2017,19:26:55,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,08
    3220,16-03-2017,19:27:01,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3221,16-03-2017,19:27:01,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,08
    3223,16-03-2017,19:27:03,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3239,16-03-2017,19:27:27,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,01
    3240,16-03-2017,19:27:27,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,00
    3242,16-03-2017,19:27:30,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,01
    3243,16-03-2017,19:27:30,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,00
    3245,16-03-2017,19:27:33,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3247,16-03-2017,19:27:34,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,08
    3251,16-03-2017,19:27:36,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3252,16-03-2017,19:27:36,BP_Face,1.1.22,Eclairage_Variation_Chambre_Centre,1/2/4,08
    3347,16-03-2017,19:29:14,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,01
    3348,16-03-2017,19:29:14,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,00
    3352,16-03-2017,19:29:17,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3354,16-03-2017,19:29:17,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,08
    3359,16-03-2017,19:29:25,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,09
    3360,16-03-2017,19:29:26,BP_Entree_Chambre_1,1.1.18,Eclairage_Variation_Chambre_Centre,1/2/4,08
    2°- Un deuxième parsing (toujours en java) récupère dans le 1er csv les infos dont j'ai besoin et le met en forme de façon à ce qu'elles puissent être utilisées par C3js, ce qui donne :
    date,Eclairage_Chambre_Applique_Var,Eclairage_Chambre_Centre_Var,Eclairage_Entree_Centre,Eclairage_Exterieur,Eclairage_Rangement,Eclairage_Salon_Centre_Var,Eclairage_Salon_Cuisine,Eclairage_Variation_Chambre_Centre,Eclairage_Variation_Salon_Centre,Eclairage_WC
    2017-03-16 20:01:34,0,1,0,0,0,0,0,0,0,0
    2017-03-16 20:01:45,0,1,0,0,0,0,0,0,0,0
    2017-03-16 20:01:48,0,0,0,0,0,0,0,2,0,0
    2017-03-16 20:01:59,1,0,0,0,0,0,0,0,0,0
    2017-03-16 20:02:28,0,0,0,0,0,0,0,2,0,0
    2017-03-16 20:02:31,0,1,0,0,0,0,0,0,0,0
    2017-03-16 20:02:33,0,0,0,0,0,0,0,2,0,0
    2017-03-16 20:02:35,0,0,0,0,0,0,0,2,0,0
    2017-03-16 20:02:42,0,0,0,0,0,0,0,1,0,0
    2017-03-16 20:02:43,0,0,0,0,0,0,0,1,0,0
    2017-03-16 20:02:45,0,0,0,0,0,0,0,1,0,0
    2017-03-16 20:03:13,0,0,0,0,0,0,0,0,0,1
    2017-03-16 20:03:42,0,0,0,0,0,0,0,2,0,0
    2017-03-17 20:03:45,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:03:46,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:03:48,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:03:50,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:03:51,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:03:55,0,0,0,0,0,0,0,1,0,0
    2017-03-17 20:08:48,0,1,0,0,0,0,0,0,0,0
    2017-03-17 20:08:52,0,1,0,0,0,0,0,1,0,0
    Ces fichier sont utilisés par C3js pour générer les graphs.
    Pour ce qui est de la partie web, c'est du static, pas de PHP (c'est du parlé noir du Mordor) et j'utilise Javascript pour C3js
    L'interface ressemble à ceci :
    Nom : interface Klog test3.jpg
Affichages : 146
Taille : 126,7 Ko
    Voila, voila, ça fait usine à gaz mais bon, ça fonctionne.
    En tout cas merci de ton aide et de l'intérêt que tu as bien voulu porter à mon projet.

  12. #32
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Salut,
    J'ai un peu fais évoluer mon appli et par conséquence, mon code.
    Je souhaiterai ne plus faire le compte des actions d'un équipement car en terme de représentation graphique, ce n'est pas très cohérent.
    Je me retrouve avec des équipements qui peuvent avoir à un instant t plusieurs actions, hors ce n'est pas une approche correcte du traitement des données.
    Les deux seuls états possibles à un instant t doivent 0 ou1.
    Comment pourrais je m'y prendre ?
    J'ai essayé de supprimer
    en modifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<LocalDate,Map<LocalTime,Map<String,Long>>>
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<LocalDate,Map<LocalTime,Map<String,List<Donnees>>>>
    mais :
    me retourne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La méthode getOrDefault(Object, List<Donnees>) du type Map<String,List<Donnees>> ne s’applique pas aux arguments (String, long)
    Mon interface ressemble à ça maintenant :
    Nom : interface Klog test4.jpg
Affichages : 106
Taille : 122,8 Ko
    On peut voir que Ouverture_Porte_Entree_Exterieure est à 4 actions à 09:31:35.
    Voila, si quelqu'un a une solution.
    Merci.

  13. #33
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gadje Voir le message
    Les deux seuls états possibles à un instant t doivent 0 ou1.
    Comment pourrais je m'y prendre ?
    Actuellement, tu obtiens pour chaque date/heure et equipement, un compte, soit un nombre (int). A la place, si je comprends bien, tu veux obtenir une valeur d'un type à 2 valeurs, 0 et 1.

    Si c'est simplement ça, alors comme c'est Collectors.counting() qui permet d'obtenir le compte, alors il ne faut pas le supprimer, il faut le remplacer, par quelque chose qui produit 0 ou 1.

    Par exemple, si 0 correspond à compte==0 et 1 correspond à compte>0, il suffit de remplacer le Collectors.counting() par Collectors.collectingAndThen(Collectors.counting(),n->n>0), ou alors Collectors.reducing(0, (a,b)->1 ) .
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #34
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    En fait à partir du moment où un équipement apparait dans le log on suppose que cela correspond à une action de sa part.
    Mais dans certains log il y a plusieurs actions d'un même équipement au même moment.
    Comme sur ce log :
    2017-03-17 09:31:34,0,1,0
    2017-03-17 09:31:35,4,0,0
    2017-03-17 09:31:39,0,2,0
    données qui correspondent à la captures de mon précédent post.
    En fait lorsque les valeurs sont différentes de 0 elles sont à 1.

  15. #35
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu parles donc du fichier d'entrées, celui qui te sert à construire le csv, c'est ça ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #36
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Mon csv en entrée ressemble à ça:
    7621,16-03-2017,22:50:20,BP_Entree_Chambre_2,1.1.26,Ouverture_Porte_Salon_Chambre,3/0/2,00
    19416,17-03-2017,09:31:33,Indefini,1.1.37,Ouverture_Porte_Entree_Salon,3/0/1,01
    19420,17-03-2017,09:31:34,Indefini,1.1.37,Ouverture_Porte_Entree_Salon,3/0/1,00
    19424,17-03-2017,09:31:35,Indefini,1.1.37,Ouverture_Porte_Entree_Exterieur,3/0/0,01
    19425,17-03-2017,09:31:35,Indefini,1.1.37,Ouverture_Porte_Entree_Exterieur,3/0/0,00
    19426,17-03-2017,09:31:35,Indefini,1.1.37,Ouverture_Porte_Entree_Exterieur,3/0/0,00
    19427,17-03-2017,09:31:35,Indefini,1.1.37,Ouverture_Porte_Entree_Exterieur,3/0/0,00

    19437,17-03-2017,09:31:39,Indefini,1.1.37,Ouverture_Porte_Entree_Salon,3/0/1,01
    19441,17-03-2017,09:31:39,Indefini,1.1.37,Ouverture_Porte_Entree_Salon,3/0/1,00
    19445,17-03-2017,09:31:43,Indefini,1.1.37,Ouverture_Porte_Entree_Salon,3/0/1,01
    Avec les relevés correspondant aux 4 actions enregistrées pour "Ouverture_Porte_Entree_Exterieur".
    Le code précédent, lui me permet de générer un csv pour chaque type d'équipement en fonction de l'état (ouvert/fermé) et de mettre en forme mes données de façon à ce qu'elles soient utilisables par C3js.

  17. #37
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ok, donc, tu voudrais que ces 4 entrées de même date et de même heure ne compte que pour une, c'est ça ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #38
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Exactement.

  19. #39
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Reprenons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .collect(Collectors.groupingBy(Donnees::getDate,
    Collectors.groupingBy(Donnees::getTime,
    Collectors.groupingBy(Donnees::getEquipement, Collectors.counting())))) ;
    Le "groupingBy" permet de transformer un Stream d'objets qui ont une propriété de type Type en Map<Type, List<Objet>>, tel qu'on ait associé à chaque valeur de Type trouvé, l'ensemble des objets qui ont cette valeur.

    Le .collect(Collectors.groupingBy(Donnees::getDate) permet d'obtenir donc une Map qui associe date et liste des données corrsponsant :
    • date1 -> ( objet1, object23, object27, object45, object51 ... )
    • date2 - ( object35, object42... )
    • etc


    Lorsqu'on passe en second paramètre un autre collecteur, celui s'applique au résultat. Donc lorsqu'on passe en second paramètre Collectors.groupingBy(Donnees::getTime,), on regroupe les listes regroupées par date, selon la propriété time.

    On obtient donc une map à la place de la liste :

    • date1 -> (
      • time1 -> ( objet1, object23, object45)
      • time2 -> ( object27)

      )
    • date2 -> (
      • time1 -> ( object35... )
      • time3 -> ( ... )

      )
    • etc


    et ainsi de suite.
    Mais si on s'arrête ici, on peut bien considérer que tous les objets de chaque liste ont tous la même date et heure. Donc, par rapport à ce que tu veux, il suffit de considérer que de ces objets, tu ne veut en garder qu'un seul.

    Si tu veux ajouter des critères discréminants, tu peur toujours ajouter un second argument au grouping de plus bas niveau. C'est ce qu'on fait lorsqu'on ajoute Collectors.groupingBy(Donnees::getEquipement, on obtient la liste des données de même date, même heure et même qeuipement.

    a la fin on met un counting, qui permet d'en obtenir le nombre (d'éléments de cette liste). Toi tu veux considérer que tous les éléments de cette liste compte que pour 1. Donc il suffit de remplacer le compte par 1. Donc de remplacer le collecteur qui réduit la liste à sa taille en collecteur qui réduit la liste à 1. Pour être cohérent, même si'l n'est pas possible d'avoir des listes vides (ça voudrait dire qu'on a des clefs dans la map qui n'existe pas dans les données, et le groupingBy n'invente pas de clef), on va indiquer un collecteur qui retourne 0 quand la liste est vide et 1 lorsqu'elle ne l'est pas. Tu auras donc bien 1 pour chaque trio de clef. C'est ce que font les code que je t'ai donnés en exemples. Le 0 sera généré quant à lui par le getOrDefault(), qui va générer un 0 lorsqu'on aura pas de clef pour un équipement provenant de la liste de tous les équipements existant dans les données.
    On obtient bien ce que tu cherches à obtenir, non ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #40
    Nouveau membre du Club Avatar de gadje
    Homme Profil pro
    Développeur SI
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur SI

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 36
    Points
    36
    Par défaut
    Tout ce qu'il faut c'est que les doublons d'un équipement ayant exactement la même date & heure ne compte que pour 1.
    Dès qu'un équipement apparait dans un log, c'est qu'il y a eu action de sa part, donc il n'y a jamais de valeur zéro généré par les log, seulement des valeur à 1.
    Je ne sais pas si je suis très clair.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/04/2012, 16h15
  2. [Toutes versions] Afficher l'heure dans une barre de menus personnalisés
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/11/2010, 10h58
  3. Afficher l'heure dans une jsp
    Par Manitobaa dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2009, 13h44
  4. Réponses: 5
    Dernier message: 25/04/2008, 20h15
  5. Réponses: 5
    Dernier message: 07/06/2006, 13h11

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