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

C# Discussion :

C# Parser XML Recherche par date


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut C# Parser XML Recherche par date
    Bonjour,

    Je développe une application qui permet de faire une moyenne du temps de communication des utilisateurs.

    Actuellement je récupère donc un fichier xml, lorsque je rentre le numéro d'un utilisateur, tous le fichier est parcouru et j'ai donc une moyenne qui s'affiche.

    Cependant, je voudrais avoir une moyenne par mois, j'ai donc mis un datepicker mais je bloque légèrement ..!!

    Exemple d'un nœud xml :
    Code xml : 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
    <CallAccounting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CAPTicket_V001.001.xsd">
    		<OmniPCXOffice>
    			<SoftwareVersion>3EH30504DPAA ALZFR820/055.001</SoftwareVersion>
    			<CPUIPAddress>ipaddress</CPUIPAddress>
    		</OmniPCXOffice>
    		<Checksum>808632064</Checksum>
    		<TicketType>Call</TicketType>
    		<ChargedUserType>A</ChargedUserType>
    		<ChargedUserID>1114</ChargedUserID>
    		<SubscriberName>NOM Prenom</SubscriberName>
    		<CommunicationType>Outgoing</CommunicationType>
    		<TrunkType>P</TrunkType>
    		<TrunkID>001</TrunkID>
    		<Date>2014-05-06</Date>
    		<Time>16:14:00</Time>
    		<CallDuration>00:04:24</CallDuration>
    		<TaxesAmount>0</TaxesAmount>
    		<Service>ST</Service>
    		<DialledNumber>0491759075</DialledNumber>
    		<DiallingMode>M</DiallingMode>
    		<RingingDuration>00:00:00</RingingDuration>
    		<Cost>0.00</Cost>
    		<Entity>1</Entity>
    		<Currency>EUR</Currency>
    	</CallAccounting>

    Lorsque je fais la moyenne de l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var number = var number = from call in doc.Root.Elements("CallAccounting")
                             where call.Element("ChargedUserID").Value == textBox2.Text
                             select call;
     
     var moyenne = number.Sum(call => TimeSpan.Parse(call.Element("CallDuration").Value).TotalSeconds);
                    TimeSpan t = TimeSpan.FromSeconds(moyenne);
                    string answer = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
                         t.Hours,
                         t.Minutes,
                         t.Seconds);
                    listView1.Items.Add("Moyenne du temps de communication : " + answer);
    Faut-il utiliser des expressions régulières ?

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    Je ne comprends pas ton besoin. Tu veux une moyenne par mois / utilisateur ?

    Si oui alors dans ton ton premier exemple, il te faut aussi sélectionner suivant le tag <Date> ... </Date> dans la condition where suivant l'année et le mois sur lesquels tu veux la moyenne.

    Aucun besoin d'expressions régulières.
    Je ne recommande pas d'utiliser des expressions régulières pour sélectionner les nœuds dans un flux XML. C# offre des APIs permettant de faire cela simplement s'en se prendre la tête avec des expressions régulières.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    Bonjour lemoussel,

    Mon besoin est en faite de récupérer le temps de communication total d'un utilisateur sur un mois choisis, j'ai donc mon application qui parcours actuellement TOUS le fichier xml et qui additionne tous les <CallDuration>, mais forcément ça additionne TOUS les CallDuration de la personne choisis, exemple :
    Dans cet exemple le numéro de téléphone est le 1114, dans mon application je peux donc entrer 1114 et ça va parcourir tous le fichier xml et additionner tous les callduration du 1114, mais je veux qu'il additionne tous ceux qui sont par exemple dans le mois de mai.

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    Dans ton ordre Select, sur le Where tu peux ajouter une condition And sur la date a sélectionner en prenant le mois et l'année.

    Par exemple (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where call.Element("ChargedUserID").Value == textBox2.Text && call.Element("Date").Value.Year == Valeur_Année && call.Element("Date").Value.Month == Valeur_Mois

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    Erreur 1 'string' ne contient pas une définition pour 'Year' et aucune méthode d'extension 'Year' acceptant un premier argument de type 'string' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)

    Impossible de mettre le .Year (call.Element("Date").Value.Year)

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    J'ai fais autrement, je récupère la valeur du dateTimePicker en yyyy-MM et je fais un .contains :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     string month = dateTimePicker1.Value.ToString("yyy-MM");
    var number = from call in doc.Root.Elements("CallAccounting")
                             where call.Element("ChargedUserID").Value == textBox2.Text && call.Element("Date").Value.Contains(month)
                             select call;

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

Discussions similaires

  1. [AC-2000] Recherche par date comprise dans un intervalle
    Par polo31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/04/2020, 16h56
  2. [MySQL] Faire une recherche par DATE
    Par bullrot dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 14/10/2008, 14h38
  3. Faire une recherche par date
    Par ghnawfal dans le forum JSF
    Réponses: 13
    Dernier message: 11/04/2008, 07h35
  4. recherche par date vba excel
    Par fred014 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2007, 13h35
  5. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07

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