Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1940 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  chaine d'entier "csv-style" -> int[]

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

chaine d'entier "csv-style" -> int[]

n°388611
the real m​oins moins
Posté le 09-05-2003 à 19:14:16  profilanswer
 

Yop,
 
J'ai une chaine du genre "123;12;-1;45;46;38;34;" (etc), que je reçois en fait sous forme de byte[] (si je fais new String(byteArr), j'obtiens la chaine que je viens de décrire)
Je voudrais en fait un tableau d'int.  
Je ne connais pas par avance le nombre d'élements. (tout ce que je sais c'est qu'il est supposé etre pair ce nombre)
 
A votre avis, la meilleure solution? :D
 
(ça me fait chier de passer par un ArrayList et de voir y insérer des Integer - les instanciers puis repasser par des intValue partout apres - mais un int[] n'est pas resizable....)
 
Je vois plusieurs façons, mais je laisse votre créativité voguer; comment feriez-vous? :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 09-05-2003 à 19:14:16  profilanswer
 

n°388622
veryfree
Posté le 09-05-2003 à 19:30:20  profilanswer
 

the real moins moins a écrit :

Yop,
 
J'ai une chaine du genre "123;12;-1;45;46;38;34;" (etc), que je reçois en fait sous forme de byte[] (si je fais new String(byteArr), j'obtiens la chaine que je viens de décrire)
Je voudrais en fait un tableau d'int.  
Je ne connais pas par avance le nombre d'élements. (tout ce que je sais c'est qu'il est supposé etre pair ce nombre)
 
A votre avis, la meilleure solution? :D
 
(ça me fait chier de passer par un ArrayList et de voir y insérer des Integer - les instanciers puis repasser par des intValue partout apres - mais un int[] n'est pas resizable....)
 
Je vois plusieurs façons, mais je laisse votre créativité voguer; comment feriez-vous? :D
 


 
passe par un vecteur alors ...
apres t utilise la methode copyInto...

n°388625
the real m​oins moins
Posté le 09-05-2003 à 19:34:09  profilanswer
 

veryfree a écrit :


 
passe par un vecteur alors ...
apres t utilise la methode copyInto...

:sarcastic:
Si l'arraylist me fait un peu chier c'est surtout pask'on y fout des Object donc Integer dans mon cas et que ça me broute de devoir les instancier et faire des intValue dessus apres. c pas avec un vector que ça va changer :D
 
et pis pour parser le bordel. là j'utilise un StringTokenizer parce que j'ai plus de neurones, mais je me dit que c'est surement pas le plus leger dans mon cas (qui est hyper simple)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°388626
the real m​oins moins
Posté le 09-05-2003 à 19:38:41  profilanswer
 

Bon en fait là je fais

Code :
  1. StrigTokenizer tok = new StringTokenizer(machaine);
  2. int[] monarray = new int[tok.countTokens()];
  3. int pos = 0;
  4. while (tok.hasMoreTokens()){
  5.   monarray[pos] = Integer.parseInt(stok.nextToken));
  6.   pos++;
  7. }


 
 
c'est tres court et clair, mais ça me parait hyper lourdingue niveau perfs....
 
qqun a mieux?


Message édité par the real moins moins le 09-05-2003 à 19:39:00

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°388894
the real m​oins moins
Posté le 10-05-2003 à 01:02:32  profilanswer
 

cte vieux bide [:sisicaivrai]
 
meme benou est pas passé :/
 
m'en fous je l'upperai lundi matin :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°388968
darklord
You're welcome
Posté le 10-05-2003 à 11:54:30  profilanswer
 

up :o
 
edit: tu m'as meme pas demandé mon avis [:ruisseau de larmes]
 
Edit2: je vois mal comment tu pourrais faire autrement hein ;) (enfin niveau perf)


Message édité par darklord le 10-05-2003 à 12:25:26

---------------
Just because you feel good does not make you right
n°388983
benou
Posté le 10-05-2003 à 12:24:42  profilanswer
 

the real moins moins a écrit :

Code :
  1. StrigTokenizer tok = new StringTokenizer(machaine);
  2. int[] monarray = new int[tok.countTokens()];
  3. int pos = 0;
  4. while (tok.hasMoreTokens()){
  5.   monarray[pos] = Integer.parseInt(stok.nextToken));
  6.   pos++;
  7. }




bha c'est sur que là tu fais 2 parcour de la chaine, c'est pas top :/
 
mais bon, je rois pas qu'on puisse faire beaucoup mieux.
Par contre tu devrais filler le ';' comme separateur pour le String Tokenizer. Ca diminuera le nombre de test qu'il devra faire : new StringTokenizer(taChaine, ";" );
 
Et puis pour revenir sur l'idée du Vector, autant faire une LinkedList : ce serait plus performant.
 
 


---------------
ma vie, mon oeuvre - HomePlayer
n°388984
benou
Posté le 10-05-2003 à 12:25:03  profilanswer
 

DarkLord a écrit :


edit: tu m'as meme pas demandé mon avis [:ruisseau de larmes]


et on peut le connaître ?  :o


---------------
ma vie, mon oeuvre - HomePlayer
n°388985
darklord
You're welcome
Posté le 10-05-2003 à 12:26:30  profilanswer
 

benou a écrit :


et on peut le connaître ?  :o  


 
bin en gros le tien :D sauf que j'ai pas mis l'accent sur le ; comme séparateur ;)
 
mais à mon avis il l'a mit mais il l'a oublié dans le code de son post


---------------
Just because you feel good does not make you right
n°389020
the real m​oins moins
Posté le 10-05-2003 à 13:40:57  profilanswer
 

DarkLord a écrit :

up :o
 
edit: tu m'as meme pas demandé mon avis [:ruisseau de larmes]
 
Edit2: je vois mal comment tu pourrais faire autrement hein ;) (enfin niveau perf)

t'étais parti ;)
et niveau perf, bah si tu vois comment fonctionne un string tokenizer, c pas le plus leger pour juste parser un truc avec des entiers séparés par un char


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 10-05-2003 à 13:40:57  profilanswer
 

n°389022
the real m​oins moins
Posté le 10-05-2003 à 13:42:32  profilanswer
 

benou a écrit :


bha c'est sur que là tu fais 2 parcour de la chaine, c'est pas top :/
 
mais bon, je rois pas qu'on puisse faire beaucoup mieux.
Par contre tu devrais filler le ';' comme separateur pour le String Tokenizer. Ca diminuera le nombre de test qu'il devra faire : new StringTokenizer(taChaine, ";" );
 
Et puis pour revenir sur l'idée du Vector, autant faire une LinkedList : ce serait plus performant.

euh voui en fait j'utilise ce constructeur, j'ai mal recopié (spa facile de faire un copier/coller entre 2 machines :o)
 
et pour la LinkedList, ça serait mieux qu'un ArrayList? J'y pense jamais moi à ces bêtes là :o
 
merci quand meme
 
y'a donc personne qui veut faire du parsing à la sauvage char par char? :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389024
the real m​oins moins
Posté le 10-05-2003 à 13:42:57  profilanswer
 

DarkLord a écrit :


 
bin en gros le tien :D sauf que j'ai pas mis l'accent sur le ; comme séparateur ;)
 
mais à mon avis il l'a mit mais il l'a oublié dans le code de son post

comment tu me connais trop bien :ouch:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389052
benou
Posté le 10-05-2003 à 14:32:54  profilanswer
 

the real moins moins a écrit :

y'a donc personne qui veut faire du parsing à la sauvage char par char? :D


allez, cadeau :  
 

Code :
  1. package divers;
  2. import java.util.*;
  3. public class bytesToInt {
  4. public static void main(String[] args) {
  5.  String s = "123;12;-1;45;46;38;34;";
  6.  byte[] byteTab = s.getBytes();
  7.  int begin =0;
  8.  int end=0;
  9.  SimpleLinkedList stockSepareted = new SimpleLinkedList();
  10.  // split tabByte  
  11.  while (true) {
  12.   end = byteTabSearch(byteTab, (byte) ';', begin);
  13.   if (end == -1) {
  14.    break;
  15.   }
  16.   stockSepareted.add(new String(byteTab, begin, end - begin));
  17.   begin = end + 1;
  18.  }
  19.  // put in a int[]
  20.  int[] intTab = new int[stockSepareted.size()];
  21.  Iterator it = stockSepareted.iterator();
  22.  int i = 0;
  23.  while (it.hasNext()) {
  24.   intTab[i++] = Integer.parseInt((String) it.next());
  25.  }
  26.  // display Result
  27.  for (i = 0; i < intTab.length; i++) {
  28.   System.out.println(intTab[i]);
  29.  }
  30. }
  31. private static int byteTabSearch(byte[] tab, byte searched, int from) {
  32.  for (int i = from; i < tab.length; i++) {
  33.   if (tab[i] == searched){
  34.    return i;
  35.   }
  36.  }
  37.  return -1;
  38. }
  39. }
  40. class SimpleLinkedList {
  41. private Elem first = null;
  42. private Elem last = null;
  43. private int size = 0;
  44. public java.util.Iterator iterator() {
  45.  return new Iterator(first);
  46. }
  47. public void add(Object obj) {
  48.  size++;
  49.  Elem newElem = new Elem(obj);
  50.  if (this.last == null) {
  51.   this.first = newElem;
  52.   this.last = newElem;
  53.  } else {
  54.   this.last.next = newElem;
  55.   this.last = newElem;
  56.  }
  57. }
  58. public int size() {
  59.  return size;
  60. }
  61. private static class Elem {
  62.  private Object value;
  63.  private Elem next = null;
  64.  public Elem (Object value) {
  65.   this.value = value;
  66.  }
  67. }
  68. private static class Iterator implements java.util.Iterator {
  69.  private Elem elem;
  70.  public Iterator(Elem firstElem) {
  71.   this.elem = firstElem;
  72.  }
  73.  public boolean hasNext() {
  74.   return elem != null;
  75.  }
  76.  public Object next() {
  77.   Object value = elem.value;
  78.   this.elem = this.elem.next;
  79.   return value;
  80.  }
  81.  public void remove() {
  82.   throw new UnsupportedOperationException();
  83.  }
  84. }
  85. }


ca doit pas être loin d'être optimal ...


Message édité par benou le 10-05-2003 à 14:33:21

---------------
ma vie, mon oeuvre - HomePlayer
n°389066
the real m​oins moins
Posté le 10-05-2003 à 14:51:05  profilanswer
 

:love:
 
bon, et si Elem stockait directement un int au lieu d'un Object? :D
(parce qu'en fait si je me retrouve avec une IntLinkedList ou un int[] pour moi ça revient au meme:D)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389069
the real m​oins moins
Posté le 10-05-2003 à 14:51:38  profilanswer
 

etk merci bcp :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389073
Taz
bisounours-codeur
Posté le 10-05-2003 à 14:54:33  profilanswer
 

magnifique
 
 

Code :
  1. while (true) {
  2.            end = byteTabSearch(byteTab, (byte) ';', begin);
  3.            if (end == -1) {
  4.               break;
  5.            }

n°389075
the real m​oins moins
Posté le 10-05-2003 à 14:58:57  profilanswer
 

++Taz a écrit :

magnifique
 
 

Code :
  1. while (true) {
  2.            end = byteTabSearch(byteTab, (byte) ';', begin);
  3.            if (end == -1) {
  4.               break;
  5.            }



bah euh quoi? [:gratgrat]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389104
benou
Posté le 10-05-2003 à 15:18:43  profilanswer
 


y a des gens qui aiment pas les while(true) ... [:spamafote]
 
quand c'est simple, j'évite moi aussi, mais quand je dois me faire chier à dupliquer du code (à mettre avant le while) ou triturer mon algo et le rendre imcompréhensible, ben je préfère faire un bête while (true) ...


---------------
ma vie, mon oeuvre - HomePlayer
n°389106
benou
Posté le 10-05-2003 à 15:20:10  profilanswer
 

the real moins moins a écrit :

:love:
 
bon, et si Elem stockait directement un int au lieu d'un Object? :D
(parce qu'en fait si je me retrouve avec une IntLinkedList ou un int[] pour moi ça revient au meme:D)


ca je pouvais pas le savoir :)
 
vas-y, mon source est free ! :D


---------------
ma vie, mon oeuvre - HomePlayer
n°389110
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 10-05-2003 à 15:21:30  profilanswer
 

benou a écrit :


y a des gens qui aiment pas les while(true) ... [:spamafote]
 
quand c'est simple, j'évite moi aussi, mais quand je dois me faire chier à dupliquer du code (à mettre avant le while) ou triturer mon algo et le rendre imcompréhensible, ben je préfère faire un bête while (true) ...


 
Ya pas do {} while en java ?  :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°389113
benou
Posté le 10-05-2003 à 15:25:05  profilanswer
 

Tetragrammaton IHVH a écrit :


 
Ya pas do {} while en java ?  :sarcastic:  


si mais ca convenait pas ...
 
edit : enfin ca aurait pu allr, mais je me tapais quand même le test du -1 => snul ! :o


Message édité par benou le 10-05-2003 à 15:25:40

---------------
ma vie, mon oeuvre - HomePlayer
n°389118
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 10-05-2003 à 15:31:51  profilanswer
 

benou a écrit :


si mais ca convenait pas ...
 
edit : enfin ca aurait pu allr, mais je me tapais quand même le test du -1 => snul ! :o


 
C'est clair, rien de tel que la programmation "spaghetti" :lol:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°389119
the real m​oins moins
Posté le 10-05-2003 à 15:32:23  profilanswer
 

euh ouais t'aurais betement pu faire  
while (end!=-1) {
 ...
}
 
en fait [:dawa]
 
edit: ha ben non :o


Message édité par the real moins moins le 10-05-2003 à 15:32:56

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389152
benou
Posté le 10-05-2003 à 15:54:12  profilanswer
 

Tetragrammaton IHVH a écrit :


C'est clair, rien de tel que la programmation "spaghetti" :lol:


 :??:


---------------
ma vie, mon oeuvre - HomePlayer
n°389186
veryfree
Posté le 10-05-2003 à 16:24:38  profilanswer
 

puisque vous etes d humeur généreuse y en a pas un qui a déja créé une fonction qui convertis des secondes en
heure minute seconde ?
 
 :whistle:

n°389189
the real m​oins moins
Posté le 10-05-2003 à 16:29:44  profilanswer
 

Calendar c = Calendar.getInstance;
c.setTimeInMillis(secondsTotal*1000);
int hours = c.get(Calendar.HOUR_OF_DAY);
int minutes = c.get(CALENDAR.MINUTE);
int secondes = c.get(CALENDAR.SECONDS);
 
qqch comme ça :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389191
veryfree
Posté le 10-05-2003 à 16:30:49  profilanswer
 

the real moins moins a écrit :

Calendar c = Calendar.getInstance;
c.setTimeInMillis(secondsTotal*1000);
int hours = c.get(Calendar.HOUR_OF_DAY);
int minutes = c.get(CALENDAR.MINUTE);
int secondes = c.get(CALENDAR.SECONDS);
 
qqch comme ça :D


 
non non :D
 
quelque chose qui te convertis  : 70 sec en 1 min et 10 sec ;)

n°389192
benou
Posté le 10-05-2003 à 16:32:53  profilanswer
 

ben c'est exactement ce que ca fait, si tu rajoutes () à Calendar.getInstance bien sûr ;)


Message édité par benou le 10-05-2003 à 16:33:13

---------------
ma vie, mon oeuvre - HomePlayer
n°389193
veryfree
Posté le 10-05-2003 à 16:36:07  profilanswer
 

j avait pas vu!
 
merci encore  
 
 
 :jap:

n°389197
the real m​oins moins
Posté le 10-05-2003 à 16:43:18  profilanswer
 

benou a écrit :

ben c'est exactement ce que ca fait, si tu rajoutes () à Calendar.getInstance bien sûr ;)

:whistle:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389208
veryfree
Posté le 10-05-2003 à 16:51:53  profilanswer
 


 
si c etait la seule faute  :whistle:


Message édité par veryfree le 10-05-2003 à 16:52:08
n°389210
the real m​oins moins
Posté le 10-05-2003 à 16:52:46  profilanswer
 

veryfree a écrit :


 
si c etait la seule faute  :whistle:

:heink:
 
je t'ai sorti ça de tête hein, sans doc ni éditeur ni compilo  :sarcastic:


Message édité par the real moins moins le 10-05-2003 à 16:53:12

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389212
veryfree
Posté le 10-05-2003 à 16:54:38  profilanswer
 

the real moins moins a écrit :

:heink:
 
je t'ai sorti ça de tête hein, sans doc ni éditeur ni compilo  :sarcastic:  


 
mais je sais arrete de monter sur tes grand cheveaux :D
jt aime bien c pour ca que je te provoque :o

n°389214
the real m​oins moins
Posté le 10-05-2003 à 16:56:13  profilanswer
 

veryfree a écrit :


 
mais je sais arrete de monter sur tes grand cheveaux :D
jt aime bien c pour ca que je te provoque :o  

[:jm@rc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389218
veryfree
Posté le 10-05-2003 à 17:00:05  profilanswer
 


la methode : setTimeInMillis(secondsTotal*1000); a un acces protected :/
 

n°389221
benou
Posté le 10-05-2003 à 17:03:00  profilanswer
 

de tête, tu dois avoir un setTime() qui prend une Date en paramêtre et c'est date tu peux la contruire à partir d'un long (ton nombre de secondes)


---------------
ma vie, mon oeuvre - HomePlayer
n°389223
the real m​oins moins
Posté le 10-05-2003 à 17:04:24  profilanswer
 

tout à fait ;)
et y'a pas setTimeInMilliseconds?
ou bien tu peux ptet meme faire set(Calendar.SECONDS, 307072)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389224
the real m​oins moins
Posté le 10-05-2003 à 17:11:59  profilanswer
 

et arrete de pourrir mon topic d'abord :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°389225
benou
Posté le 10-05-2003 à 17:15:23  profilanswer
 

the real moins moins a écrit :


ou bien tu peux ptet meme faire set(Calendar.SECONDS, 307072)


nan, c'est pas une bonne idée parce que de base le Calendar est instancié à la date courante => tu ne changeras que le champ secondes ...


---------------
ma vie, mon oeuvre - HomePlayer
n°389229
veryfree
Posté le 10-05-2003 à 17:22:17  profilanswer
 

benou a écrit :

de tête, tu dois avoir un setTime() qui prend une Date en paramêtre et c'est date tu peux la contruire à partir d'un long (ton nombre de secondes)


 
j ai de droles de resultats
 
 

Code :
  1. public static String getTimeString(long sec)
  2.  {
  3.   Calendar c = Calendar.getInstance();
  4.   c.setTime(new Date(sec));
  5.   int hours = c.get(Calendar.HOUR_OF_DAY);
  6.   int minutes = c.get(Calendar.MINUTE);
  7.   int secondes = c.get(Calendar.SECOND);
  8.   return (hours + ":"+ minutes + ":" + secondes );
  9.  }

 
 
avec 70 comme argument ca retourne 1:0:0
 
edit: avec 70 000 ca retourne 1:1:10 << ya juste le 1er "1" qui cloche :o


Message édité par veryfree le 10-05-2003 à 19:33:49
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  chaine d'entier "csv-style" -> int[]

 

Sujets relatifs
[javascript] Lire un style css ? sivouplééé important[C]Taille de chaine de caractères dynamique...
[Windows] qui transforme un Float en une chaine de charverifier le 1er char d'une chaine
Recherche d'un mot dans une chaine de caractere ?conversion d'une chaine de caractere en nombre
Appliquer un style sur du texte, par reconnaissance syntaxiqueSQL sous VBA : comparaison entre 1 chaîne et 1 valeur numérique
ma feuille de style toute bête ne marche pas! pourquoi??Ajouter une chaine au début d'un fichier
Plus de sujets relatifs à : chaine d'entier "csv-style" -> int[]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR