Recuperer des données
Fermé
Utilisateur anonyme
-
22 juin 2015 à 20:18
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 14 juil. 2015 à 18:40
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 14 juil. 2015 à 18:40
A voir également:
- Recuperer des données
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 juin 2015 à 20:26
22 juin 2015 à 20:26
Bonjour,
"un fichier texte quiu contien 41 valeur. pour cela j ai crée un type "connection" qui contien 41 attribue."
Et que se passera-t-il le jour où tu auras 500, ou 2000 valeurs ? Tu feras aussi des classes avec 500 ou 2000 attributs ?
Un seul attribut, 41 valeurs dedans (42 en réalité !)
Sinon, c'était quoi la question ?
"un fichier texte quiu contien 41 valeur. pour cela j ai crée un type "connection" qui contien 41 attribue."
Et que se passera-t-il le jour où tu auras 500, ou 2000 valeurs ? Tu feras aussi des classes avec 500 ou 2000 attributs ?
String line = "ligne01:0,tcp,http,SF,181,5450,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,9,9,1.00,0.00,0.11,0.00,0.00,0.00,0.00,0.00,normal."; String[] tab = line.split(",");
Un seul attribut, 41 valeurs dedans (42 en réalité !)
Sinon, c'était quoi la question ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 juin 2015 à 21:16
22 juin 2015 à 21:16
Quand on commence à avoir un grand nombre de valeurs à traiter, il faut raisonner autrement, maintenir 41 attributs, 41 getteurs, 41 setteurs, ou pire un constructeur à 41 arguments, c'est ingérable.
Je propose de mettre en place une Map<K,V> où K sera un enum et V probablement Object vu la diversité de tes types. L'enum te permettra de gérer plusieurs informations comme le nom de la valeur, son type de donnée, ou sa position dans la ligne.
Alors, ça demande un peu de code au départ, mais après c'est super souple à utiliser.
Exemple :
Je propose de mettre en place une Map<K,V> où K sera un enum et V probablement Object vu la diversité de tes types. L'enum te permettra de gérer plusieurs informations comme le nom de la valeur, son type de donnée, ou sa position dans la ligne.
Alors, ça demande un peu de code au départ, mais après c'est super souple à utiliser.
Exemple :
import java.util.IdentityHashMap; import java.util.Map; public class Test { public static void main(String[] args) { Connection conn = new Connection("1;23.45", ";"); System.out.println(conn.get(ConnectionParameter.PREMIER_PARAMETRE_QUI_EST_ENTIER)); // 1 System.out.println(conn.get(ConnectionParameter.DEUXIEME_PARAMETRE_QUI_EST_DOUBLE)); // 23.45 } } interface ConnectionParser { public Object fromString(String str); public String asString(Object obj); public Class<?> getParserType(); } enum ConnectionParameter implements ConnectionParser { PREMIER_PARAMETRE_QUI_EST_ENTIER(ConnectionTransformer.INTEGER), // 0 DEUXIEME_PARAMETRE_QUI_EST_DOUBLE(ConnectionTransformer.DOUBLE); // 1 private final ConnectionTransformer transformer; ConnectionParameter(ConnectionTransformer transformer) { this.transformer = transformer; } @Override public Object fromString(String str) { return transformer.fromString(str); } @Override public String asString(Object obj) { return transformer.asString(obj); } @Override public Class<?> getParserType() { return transformer.getParserType(); } } enum ConnectionTransformer implements ConnectionParser { INTEGER() { @Override public Object fromString(String str) { return Integer.parseInt(str); } @Override public String asString(Object obj) { return Integer.toString((Integer) obj); } @Override public Class<?> getParserType() { return int.class; } }, DOUBLE() { @Override public Object fromString(String str) { return Double.parseDouble(str); } @Override public String asString(Object obj) { return Double.toString((Double) obj); } @Override public Class<?> getParserType() { return double.class; } }; } class Connection { private final Map<ConnectionParameter, Object> parameters; public Connection() { parameters = new IdentityHashMap<ConnectionParameter, Object>(ConnectionParameter.values().length); } public Connection(String[] values) { this(); ConnectionParameter[] parameterValues = ConnectionParameter.values(); if (values.length != parameterValues.length) throw new IllegalArgumentException(); for (int i = 0; i < parameterValues.length; i++) putFromString(parameterValues[i], values[i]); } public Connection(String line, String delimiter) { this(line.split(delimiter)); } public void put(ConnectionParameter parameter, Object value) { parameters.put(parameter, value); } public void putFromString(ConnectionParameter parameter, String value) { put(parameter, parameter.fromString(value)); } public Object get(ConnectionParameter parameter) { return parameters.get(parameter); } }
Merci pour le code c'est vraiment souple et facile mais le travail que je veut faire consiste:
-recuperer toutes les valeur contenue dans la meme ligne a une seul variable qui contien attribue
-cette variable va representer ensuite un point dans un graphe de Clustering (k-means)
par exemple a c'est la variable et X14 c'est l'attribue numero 14 de la variable a donc on accede a de cette maniere a.X14.
merci :)
-recuperer toutes les valeur contenue dans la meme ligne a une seul variable qui contien attribue
-cette variable va representer ensuite un point dans un graphe de Clustering (k-means)
par exemple a c'est la variable et X14 c'est l'attribue numero 14 de la variable a donc on accede a de cette maniere a.X14.
merci :)
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
23 juin 2015 à 20:28
23 juin 2015 à 20:28
par exemple a c'est la variable et X14 c'est l'attribue numero 14 de la variable a donc on accede a de cette maniere a.X14.Avec mon code d'hier :
Connection a = ... Object res = a.get(ConnectionParameter.X14);
Il faut juste que X14 soit déclaré dans l'enum (en 14è position) avec son type de donnée associée, comme dans mon exemple.
DjimM
Messages postés
8
Date d'inscription
mardi 5 mai 2015
Statut
Membre
Dernière intervention
13 juillet 2015
28 juin 2015 à 12:37
28 juin 2015 à 12:37
merci une autre fois pour le code mais le probleme est quand je remplace le fichier text que vous avez saisez "1;23.45", ";" avec celui la ça "rest0,tcp,http,SF,235,1337,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,29,29,1.00,0.00,0.03,0.00,0.00,0.00,0.00,0.00,normal.
" ne marche plus
merci d avvance
" ne marche plus
merci d avvance
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
28 juin 2015 à 12:45
28 juin 2015 à 12:45
Evidemment que ça ne marche plus, ce n'était qu'un exemple !
J'avais pris "1;23.45" car cela correspondait à mon enum :
Pour que ça fonctionne chez toi avec ta String à 41 champs, il faut modifier cet enum pour qu'elle ait 41 valeurs, et quelle parse les différents champs avec le type que tu veux.
Remarque : moi j'ai créé deux types INTEGER et DOUBLE pour mon exemple, si tu as besoin d'autres types de données, il faudra les rajouter dans la deuxième enum pour déterminer de quelle manière la String doit être parsée.
J'avais pris "1;23.45" car cela correspondait à mon enum :
enum ConnectionParameter implements ConnectionParser { PREMIER_PARAMETRE_QUI_EST_ENTIER(ConnectionTransformer.INTEGER), // 0 DEUXIEME_PARAMETRE_QUI_EST_DOUBLE(ConnectionTransformer.DOUBLE); // 1
Pour que ça fonctionne chez toi avec ta String à 41 champs, il faut modifier cet enum pour qu'elle ait 41 valeurs, et quelle parse les différents champs avec le type que tu veux.
Remarque : moi j'ai créé deux types INTEGER et DOUBLE pour mon exemple, si tu as besoin d'autres types de données, il faudra les rajouter dans la deuxième enum pour déterminer de quelle manière la String doit être parsée.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
>
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
Modifié par KX le 28/06/2015 à 13:28
Modifié par KX le 28/06/2015 à 13:28
Par exemple, dans ton cas :
Et il faut rajouter STRING dans ConnectionTransformer :
Remarque : avant que tu ne poses la question, pour mon exemple j'avais "1;23.45" et je découpais les champs sur le point virgule. Vu ta chaîne il faut faire le découpage sur une virgule, ce paramétrage se fait au tout début du code :
enum ConnectionParameter implements ConnectionParser { X1_STRING(ConnectionTransformer.STRING), // rest0 X2_STRING(ConnectionTransformer.STRING), // tcp X3_STRING(ConnectionTransformer.STRING), // http X4_STRING(ConnectionTransformer.STRING), // SF X5_INTEGER(ConnectionTransformer.INTEGER), // 235 X6_INTEGER(ConnectionTransformer.INTEGER), // 1337 ...
Et il faut rajouter STRING dans ConnectionTransformer :
STRING() { @Override public Object fromString(String str) { return str; } @Override public String asString(Object obj) { return (String) obj; } @Override public Class<?> getParserType() { return String.class; } }
Remarque : avant que tu ne poses la question, pour mon exemple j'avais "1;23.45" et je découpais les champs sur le point virgule. Vu ta chaîne il faut faire le découpage sur une virgule, ce paramétrage se fait au tout début du code :
public static void main(String[] args) { Connection conn = new Connection("1;23.45", ";");
public static void main(String[] args) { Connection conn = new Connection("rest0,tcp,http,SF,235,1337...", ","); String x1 = (String) conn.get(ConnectionParameter.X1_STRING); // rest0 int x5 = (int) conn.get(ConnectionParameter.X5_INTEGER); // 235
Modifié par mustapha-kh le 22/06/2015 à 20:32
le truc c'est que je doit traiter plusieur ligne qui se trouve dans un fichier txt
22 juin 2015 à 20:42