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

avec Java Discussion :

Jouer avec des types


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Jouer avec des types
    Bonjour,

    J'ai créé un fichier XML dans lequel je définis des objets "data" avec un "startIndex" un "endIndex" et un "type".
    Mon objectif c'est de pouvoir contrôler le contenu d'un fichier texte avec ces informations.

    Par exemple je définis une seule donnée dans mon XML :
    startIndex : 0
    endIndex : 10
    type : java.lang.Number

    et dans mon fichier la ligne :
    0123456789

    Je souhaite écrire une fonction de contrôle qui va regarder si de l'index 0 à l'index 10 j'ai bien une donnée pouvant correspondre au type Number (oui dans l'exemple). Mais cette fonction doit pouvoir gérer d'autres types.

    Si j'ai dans mon XML :
    startIndex : 0
    endIndex : 10
    type : java.lang.Double

    et dans mon fichier la ligne :
    01234.6789

    ça doit pouvoir marcher aussi.

    voici ma fonction à l'heure actuelle :

    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
     
    param 1 : Fichier sous forme de chaine
    param 2 : donnée du XML à vérifier
    public boolean isDataValid(String Data, Data data) { 
          int startIndex = Integer.parseInt(dataProp.getStartIndex());
          int endIndex = Integer.parseInt(dataProp.getEndIndex());
          String type = dataProp.getType();
     
          String currentData = "";
     
          for(int i = startIndex; i<endIndex; i++) {
             currentData += data.charAt(i);
          }
     
          Et ici il faudrait que je test si "currentData", la chaîne composée de 10 caractères dans le fichier peut être convertie en une donnée de classe "type".
    }
    N'hésitez pas à me poser des questions si je n'ai pas assez bien énoncé le problème.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    D'abord, utilise substring pour extraire les données, c'est plus performant.

    Ensuite, stocke des int dans ton objet Data, plutot que des String pour les index, ça t'évitera de faire un parsing à chaque fois.

    Ensuite, pour le type, le plus simple dans ton cas, ce serait de créer un enum avec les type possibles, dans ce genre


    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
    public enum DataType {
     
       DOUBLE {public boolean valid(String texte){
           try  {  
              Double.parseDouble( input );  
              return true;  
           }  catch( Exception )  {  return false; }
         }},
       INTEGER {public boolean valid(String texte){
           try  {  
              Integer.parseInt( input );  
              return true;  
           }  catch( Exception )  {  return false; }
         }};
     
       public boolean abstract valid(String texte);
    }
    Dans ton xml, si tu as <type>DOUBLE</type> tu peux récupérer le type via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataType.valueOf(typeTexte);
    , que tu peux aussi stocker dans ta clase Data.

    et au final ton test sera simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public boolean isDataValid(String ligne, Data data) { 
          return data.getType().isValid(
                 ligne.subString(startIndex,endIndex) );
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    C'est noté pour substring .

    Je vais mettre en place la méthode qui tu as proposé qui me semble très bonne.

    Je fais un retour rapidement.

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

Discussions similaires

  1. Réponses: 76
    Dernier message: 14/08/2014, 11h05
  2. [SQL] Jointure avec des type des données différents
    Par Deciprog dans le forum SAS Base
    Réponses: 4
    Dernier message: 23/04/2010, 14h07
  3. Réponses: 5
    Dernier message: 22/12/2009, 13h09
  4. [2.0] polymorphisme avec des types générique
    Par mister3957 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 31/05/2007, 08h11
  5. Impossible d'utiliser DISTINCT avec des types image et ntext
    Par azlinch dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 17h43

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