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 :

Méthodologie pour parser du csv


Sujet :

Documents Java

  1. #1
    Membre régulier
    Homme Profil pro
    Expert Middleware
    Inscrit en
    Septembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Expert Middleware

    Informations forums :
    Inscription : Septembre 2006
    Messages : 75
    Points : 100
    Points
    100
    Par défaut Méthodologie pour parser du csv
    Bonjour a tous,

    une petite question méthodologie pour moi aujourd'hui. Je dois parser un fichier csv qui à la tete suivante :

    Heure1;Catégorie1;Valeur1;Valeur2;Valeur3;Valeur4
    Heure1;Catégorie2;Valeur1;Valeur2;Valeur3;Valeur4
    Heure1;Catégorie3;Valeur1;Valeur2;Valeur3;Valeur4
    Heure1;Catégorie4;Valeur1;Valeur2;Valeur3;Valeur4
    Heure2;Catégorie1;Valeur1;Valeur2;Valeur3;Valeur4
    Heure2;Catégorie2;Valeur1;Valeur2;Valeur3;Valeur4
    Heure2;Catégorie3;Valeur1;Valeur2;Valeur3;Valeur4
    Heure2;Catégorie4;Valeur1;Valeur2;Valeur3;Valeur4

    Exemple:

    08:10:33.322;monAppli;0;212;2;8

    Ma question concerne le parsing de ce fichier. Je le lis sans problème et pour le parser pareil mais je souhaiterais savoir comment "stocker" mes valeurs. Le but étant au final d'avoir un tableau de valeur en fonction de l'heure groupé par catégorie. Le nombre de catégorie pouvant bien sur évoluer et leur nom étant variable. Personnelement j'ai pensé aux méthodes suivantes :
    - Des beans. Naturellement je me pencherai vers cette solution mais est-ce vraiment la bonne ?
    - Des tableaux. Même si dans ma tête c'est beaucoup moins clair sur la méthodologie.
    - Autre ?

    Merci a vous !
    Quand on est mort, on ne sait pas qu’on est mort, c’est pour les autres que c’est difficile… Quand on est con, c’est pareil.

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Me première idée serait une classe Categorie qui contiendrait une liste de valeur puis de stocker dans une Map<Heure, List<Categorie>>

    Ici je ne sais pas trop comment tu comptes représenter l'heure (date, entier, String ?) mais je pars du principe qu'elle servira de clé pour trouver une liste de catégorie.

    Ensuite tu peux exploiter ça facilement.

    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
     
    public class Categorie
    {
      private String name;
      private List<Integer> listValues;
     
      public Categorie( String name ){ 
        this.name =name; 
        listValues = new ArrayList<>();
      }
     
      public String getName(){ return name; }
     
      public void addValue( Integer value ){ listValues.add( value );
     
      public void printValues(){
        for( Integer value : listValues )
          system.out.println( value );
      }
    }
     
     
    // on parcours le tout
    for( Map.Entry<Heure, List<Categorie>> entry : map )
    {
      System.out.println( "Heure : " + map.getKey();
     
      for( Categorie categorie :  entry.getValue() )
      {
        System.out.println( categorie.getName() );
        categorie.printValues();
      }
    }
    Sachant que tu peux facilement remplacer la liste d'entier par une liste d'objet de ton choix si besoin.

    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
     
    public class Value
    {
      private String name;
      private int value;
     
      public Value( String name, int value ){...}
     
      public String toString()
    }
     
    public class Categorie
    {
    .....
     
      //on a ducoup une liste de Value
      private List<Value> listValues;
     
      // La fonction printValues() devient donc
      public void printValues(){
        for( Value value : listValues )
          System.out.println( "Name : " + value.getName() + ", value : " +  value.getValue() );
      } 
     
    }
    Ça reste schématisé mais l'idée générale est là. Tu peux faire évoluer ces classes facilement en fonction des données réelles que tu utilises

  3. #3
    Membre régulier
    Homme Profil pro
    Expert Middleware
    Inscrit en
    Septembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Expert Middleware

    Informations forums :
    Inscription : Septembre 2006
    Messages : 75
    Points : 100
    Points
    100
    Par défaut
    OK je pense comprendre le principe effectivement mais une chose me pose quand meme soucis.

    Sur mes 4 valeurs (ce qui m'interresse à vrai dire) avec ta méthode je ne sais plus retrouver mes petits non ?

    Le but final étant pour chaque catégorie d'afficher un graph des valeurs (Valeur1 étant l'utilisation CPU, Valeur1 la RAM, Valeur3 le nombre de requete reçu, Valeur4 le nombre de requête transmise)
    Quand on est mort, on ne sait pas qu’on est mort, c’est pour les autres que c’est difficile… Quand on est con, c’est pareil.

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Je t'ai mis dans le premier bout de code la boucle pour tout parcourir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // on parcours le tout
    for( Map.Entry<Heure, List<Categorie>> entry : map )
    {
      System.out.println( "Heure : " + map.getKey(); // Par heure
     
      for( Categorie categorie :  entry.getValue() )     // Tes catégories
      {
        System.out.println( categorie.getName() ); 
        categorie.printValues();                               // l'ensemble des valeurs pour une catégorie.
      }
    }
    Maintenant pour créer un graphe il faut surtout savoir comment tu comptes présenter tes données. Le problème dans tout ça c'est que tes valeurs n'ont pas la même échelles. Le mieux serait d'afficher 4 graphes (pour tes 4 valeurs) en fonction des catégories.

    Un exemple simple avec JFreeChart pour afficher le % CPU utilisé par heure.

    En premier on modifie un peu la classe Categorie pour y intégrer tes 4 variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Categorie{
     
     double CPU;
     double RAM;
     int receivReq;
     int reqSend;
     
     // Getter/Setter
    }
    La map prend donc des entiers comme clé pour les 24h de la journée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Map.Entry<Integer, List<Categorie>> map;
    Le graphique
    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
     
    final DefaultCategoryDataset cpuDataset = new DefaultCategoryDataset();
     
    for( int i=1;i<25;i++) 
    {
      if( map.get(i) != null )
        for( Categorie categorie : map.get(i).getValue() )   // Pour chaque catégorie
        {
          cpuDataset.addValue( categorie.getCPU(), categorie.getName(), i ); // On récupère le % CPU
        }
      }
    }
     
    final JFreeChart barChart = ChartFactory.createBarChart("Utilisation CPU", "Heure", "%", 
    			dataset, PlotOrientation.VERTICAL, true, true, false);
     
    final ChartPanel cPanel = new ChartPanel(barChart);
    setContentPane( chartPanel );
    Les autres se font de la même manière.

    Exemple complet:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    public class AppChart extends JFrame {
     
    	private static final long serialVersionUID = 1L;
     
    	Map<Integer, List<Categorie>> map;
     
    	private void init() {
    		map = new HashMap<>();
     
    		for (int i = 0; i < 25; i++) {
    			List<Categorie> cat1 = new ArrayList<>();
     
    			cat1.add(new Categorie("Appli 1", Math.random() * 100));
    			cat1.add(new Categorie("Appli 2", Math.random() * 100));
    			cat1.add(new Categorie("Appli 3", Math.random() * 10));
    			cat1.add(new Categorie("Appli 4", Math.random() * 10));
     
    			map.put(i, cat1);
    		}
    	}
     
    	private void displayChart() {
     
    		final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     
    		for (Map.Entry<Integer, List<Categorie>> entry : map.entrySet()) {
    			for (Categorie categorie : entry.getValue()) {
    				dataset.addValue(categorie.getCPU(), categorie.getName(), entry.getKey());
    			}
    		}
     
    		final JFreeChart barChart = ChartFactory.createBarChart("Utilisation CPU", "Heure", "%", dataset,
    				PlotOrientation.VERTICAL, true, true, false);
     
    		final ChartPanel cPanel = new ChartPanel(barChart);
    		setContentPane(cPanel);
    	}
     
    	private class Categorie {
    		String name;
    		double CPU;
     
    		public Categorie(String name, double cpu) {
    			this.name = name;
    			this.CPU = cpu;
    		}
     
    		public double getCPU() {
    			return CPU;
    		};
     
    		public String getName() {
    			return name;
    		}
     
    	}
     
    	public static void main(String[] args) {
    		AppChart app = new AppChart();
    		app.init();
    		app.displayChart();
    		app.pack();
    		app.setVisible(true);
    	}
    }
    Cdt.

Discussions similaires

  1. Méthodologie pour un panier
    Par Oluha dans le forum E-Commerce
    Réponses: 9
    Dernier message: 18/01/2007, 14h21
  2. [regex] Epuration StackTrace pour fichier CSV
    Par BizuR dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2006, 11h57
  3. Réponses: 11
    Dernier message: 13/04/2006, 15h18
  4. Réponses: 2
    Dernier message: 04/01/2006, 10h59
  5. Méthodologie pour les tests
    Par Maitre B dans le forum Test
    Réponses: 7
    Dernier message: 10/03/2005, 17h57

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