Extraire des données dans une matrice

bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009 - 9 juin 2009 à 17:32
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 - 4 juil. 2009 à 00:40
bonjour, voilà mon pb:
je dois créer une matrice de traffic avec java: cette matrice calcule la somme de duréé de l'appel entre l'appelant et l'appelé.j'ai des fichiers text dans lesquels il y a les différents données sur l'appelant et l'appelé et la durée de leurs appels, c pourquoi dans un premier temps, faudra que j'extrait les données dont g besoin et les mettre dans cette matrice puis cette matrice doit calculer la durée entre l'appelant et l'appelé.
merci de bien vouloir m'aider, c urgent.

109 réponses

cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 10:17
Bonjour,
tu peux t'inspirer de ce code:
//ta ligne est dans lgne
String   lgne="salut;ça;va;bien";
//compose ligne contient les données qu'on veut extraire

String composligne=new String[4];
//tu utilise la class StringTokenizer qui permet de faire la décomposition selon ";"

StringTokenizer  tok=new StringTokenizer(lgne,",");

int n=0;

while(tok.hasMoreTokens())
{
//repete la boucle tant que il y a un point virgule

composligne[n]=tok2.nextToken();
//nexttoken extrait les sous chaines

n++;

}
aprés tu peux parser en integer.
essai et informe moi de tes résultats.
boncourage
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 11:06
bonjour,
merci beaucoup pour votre aide.
s'il vous plait , pour cette boucle je la répète selon le nombre des point virgule que j'ai entre mes champs?
while(tok.hasMoreTokens())
{
composligne[n]=tok2.nextToken();

n++;
}

je veux dire j'ai par exemple:
String lgne="N_ORIG;ID_SWITCH_ORIG;N_DEST;TYPE_DEST ";
selon le nombre des virgules ici , je refais ma boucle?
et pour :
composligne[n]=tok2.nextToken();

pourquoi tok2 et non pas tok?

voilà ce que j'ai fait mais ça génère des erreurs, je crois que  j'ai loupé quelque chose, ceux que j'ai mis en rouge sont souligné et il n'y aucune suggestion en eclipse:

import java.io.*;
import java.util.StringTokenizer;
public class CatFichier  {
    public static void main(String[] args) throws IOException{
        String lgne="N_ORIG;ID_SWITCH_ORIG;N_DEST;TYPE_DEST" ;
        String composligne= new String [4];
        StringTokenizer  tok=new StringTokenizer(lgne,";");
        int n=0;
        while(tok.hasMoreTokens())
        {
           
            composligne[n]=tok2.nextToken();
           
            n++;
        }
        while(tok.hasMoreTokens()){
            composligne[n]=tok2.nextToken();
            n++;
        }
        while(tok.hasMoreTokens()){
            composligne[n]=tok2.nextToken();
            n++;
            }
       
           
       
       
BufferedReader fichier = new BufferedReader(new FileReader("E://Documents and Settings//Ibtissame//Mes documents/Mes fichiers reçus//CAA.txt"));
String str;
str = fichier.readLine( );
    while (str != null){
        String tab[]=str.split(";");
        System.out.println(tab[2]);
        System.out.println(tab[0]);
        System.out.println(tab[6]);
       
        str = fichier.readLine( );
        }
    }

       
       
            }
       
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 11:15
ok.
il faut rajouter le package. tu peux voir le lien suivant http://www.java2s.com/Code/JavaAPI/java.lang/StringTokenizer.htm. sinon pour le nombre de fois que tu dois répéter ben c'est le nombre de tes données
"sa;va;bien"  c'est 3 fois.
Boncourage tiens moi au jus.
salut
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 11:29
avec le changement suivant :
String [] composligne= new String [4];
ou carrément :
String [] monTableau={new String(el1),new String(el2),new String(el3),new String(el4))}

boncourage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 11:31
merci encore , je vais essayer tout ça.
c'est très gentil à vous de m'aider.
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 11:35
Erreur Mec:
composligne[n]=tok2.nextToken()   ça vient faire quoi ici tok2 tu la définit avant?? a mon avis c tok.
salut
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 11:37
Désolé erreur de ma part j'ai écris vite c'est tok . c'est tt bon je pense. désolé pour l'erreur .
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 12:24
salut,
voilà le code que j'ai fait, mais il genère tjs une erreurs, en fait je commence à me perdre, ce dont j'ai besoin c'est d'extraire juste les champs dont g besoin et les mettre dans un autre fichiers, en tt cas voilà le code :

import java.io.*;
import java.util.StringTokenizer;
public class CatFichier  {
    public static void main(String [] args) throws IOException  {
   
       
BufferedReader fichier = new BufferedReader(new FileReader("E://Documents and Settings//Ibtissame//Mes documents/Mes fichiers reçus//CAA.txt"));
String str;
str = fichier.readLine( );
    while (str != null){
        String tab[]=str.split(";");
        System.out.println(tab[2]);
        System.out.println(tab[0]);
        System.out.println(tab[6]);
       
        str = fichier.readLine( );
        }
    String lgne="N_ORIG;ID_SWITCH_ORIG;N_DEST;TYPE_DEST" ;
    String []composligne= new String [4];
    StringTokenizer  tok=new StringTokenizer(lgne,";");
    int n=0;
    while(tok.hasMoreTokens())
    {
      
        composligne[n]=tok.nextToken();
      
        n++;
    }
    while(tok.hasMoreTokens()){
        composligne[n]=tok.nextToken();
        n++;
    }
    while(tok.hasMoreTokens()){
        composligne[n]=tok.nextToken();
        n++;
        }
}

    }

       
       
            et voilà l'erreur qu'il génère:

N_DEST      
N_ORIG  
 durée
052836003   
028877888
 36  
065847546   
028877888
 17  
072333568   
037520986
 14  
074387978   
035271374
 1   
013340125   
035271374
 101 
079080890   
035271374
 87  
0033494998162
037520986
 60  
0034677071567
028877888
 11  
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at CatFichier.main(CatFichier.java:13)
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 13:44
Ben normal ta dépassé la dimension de ton tableau. le code que je t'ai passé devait remplacer la partie:
while (str != null){
        String tab[]=str.split(";");
        System.out.println(tab[2]);
        System.out.println(tab[0]);
        System.out.println(tab[6]);
       
        str = fichier.readLine( );
        }
Donc on se concentre un peu. tu arrive maint a extraire tes données du fichier.
tu dois ouvrir un fichier de sortie . dans lequel tu veux écrire tes données . ben tu lis une ligne du fichier de l'entrée , tu la traite et t'écris dans le fichier de sortie ce que tu désire. le plus raisonable c'est de créer une liste avec tete et quee comme ça tu stok dedans tes données traités. aprés tu ouvre un fichier pour écrire dedans. voila l'algorithme.
Début:
ouvrir fichier d'entrée
                          lire ligne par ligne et extraire les données voulus
                          les stoké dans une liste
fermeture du fichier d'entrée
ouverture du fichier de sortie
                          parcourir ta liste et écrire ce que tu désire dans le fichier out
fermer le fichier sortie
boncourage
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
12 juin 2009 à 14:53
Salut !
Il y a eu de la progression à ce que je vois. c'est bien.
Pour écrire des données va voir les outputstream (bufferedoutputstream, fileoutputstream...)

The possible meet the impossible to become the possimpible !!
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 15:43
salut,
merci c'est grâce à vous que j'en suis là, en fait pour le moment je récupère les champs que je veux mais dans la même colonne, j'arrive toujours pas à les récuperer chacune dans une colonne, j'ai utilisé ceci:
StringTokenizer st = new StringTokenizer("N_ORIG;N_DEST;ID_SWITCH_DEST;D_SEBCOM;durée;INCTRUNKLD;OUTGTRUNKLD
",;
while (st.hasMoreTokens())
System.out.println(st.nextToken());   
}
 mais ça me donne juste ce qui est en stringTokenizer, chacune en ligne donc je crois que c'est pas ce qu'il faut faire.

donc ma question, qu'est ce qu'il manque à ce code, pour qu'il affiche chaque champs voulu en une colonne:

BufferedReader fichier = new BufferedReader(new FileReader("E://Documents and Settings//Ibtissame//Mes documents/Mes fichiers reçus//CAA.txt"));
String str;
str = fichier.readLine( );
    while (str != null){
        String tab[]=str.split(";");
        System.out.println(tab[2]);
        System.out.println(tab[0]);
        System.out.println(tab[6]);
       
        str = fichier.readLine( );
        }
    }
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 15:47
en fait vous m'avez dit que c parce que j'ai dépassé la limite de mon tableau que j'ai cette erreur:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at CatFichier.main(CatFichier.java:14)

comment faire alors pour l'éviter?

merci encore pour votre aide.
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
12 juin 2009 à 15:52
Si ce que tu entends pas une colonne c'est sa :
tab[0]
tab[2]
tab[6]
ce n'est pas grave c'est juste un affichage mais si tu y tiens vraiment fait comme ça:
        System.out.print(tab[2]+"\t"+tab[0]+"\t"+tab[6]+"\n");
au lieu de
        System.out.println(tab[2]);
        System.out.println(tab[0]);
        System.out.println(tab[6]);

explication : "\t" représente la tabulation et "\n" c'est le retour à la ligne

The possible meet the impossible to become the possimpible !!
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
12 juin 2009 à 15:57
Alors il nous faudrait la ligne 14 de ton code puisque l'erreur se trouve à cette ligne !
mais comme je t'ai dis c'est surement parce que à un moment ou à un autre       le tableau tab ne peut pas accéder aux éléments tab[2] - tab[0] - tab[6]puisque tab ne contient pas autant d'éléments.
Quand tu effectues ton affichages, vérifie la taille de ton tableau avec tab.size() il me semble

The possible meet the impossible to become the possimpible !!
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 15:57
salut,
en fait c'est bon, j'ai trouvé pour que chaque champs soit affiché en une colonne , il a juste fallu faire cela:

String str;
str = fichier.readLine( );
    while (str != null){
        String tab[]=str.split(";");
        System.out.println(tab[0] +"      "+ tab[2] );

 j'obtiens ceci :

N_ORIG         N_DEST      
028877888      052836003   
028877888      065847546   
037520986      072333568   
035271374      074387978   
035271374      013340125   
035271374      079080890   
037520986      0033494998162
028877888      0034677071567
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at CatFichier.main(CatFichier.java:13)

mais comme vous le remarquez toujours la même erreur, alors s'il vous plait comment éviter cette erreur?
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 16:06
salut ; je viens de lire vos suggestions,juste  après avoir posté, ce que j'ai fait, et il s'avère que s'est la même chose.   , merci moh008,  en fait pour eviter l'erreur, est ce que je dois definir les dimensions de mon tableau?
comment faire s'il vous plait?
la ligne  13 est ceci:
System.out.println(tab[0] +"      "+ tab[2]);
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 juin 2009 à 16:09
dis est ce que ça te fait déja toutes les données???.
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
12 juin 2009 à 16:16
Trois questions :
 - le fichier que tu lis contient combien de ligne ?
 - tu arrives à en afficher combien?

The possible meet the impossible to become the possimpible !!
0
bettysatte Messages postés 58 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 2 juillet 2009
12 juin 2009 à 16:33
salut;
c'est bon le problème est résolu, en réalité mon fichier était format excel, et je l'ai converti en fichier text, et c'était là le problème, je viens de le convertir  au format csv, et donc il donne plus d'erreur:
merci encore les amis pour votre aide, vous êtes super.

maintenant pour l'étape suivante:
il faudra quand je récupère le numéro appelant et le numéro appelé de tester dans quelle plage se trouve chaque numéro pour determiner son URA., et cela de ce fichier:

Ura              ;seuil_min     ;seuil_max;
UR001         ;028210000 ;028233999;
UR002         ;028292000 ;028292999;
mobile IAM  ;010330000 ;078999999;
internationnal ;00000         ;022920999;
meditel          ;020000000 ;082039999;
wana             ;038000000 ;088199999;

par exemple :

si   id_ORG<= 028210000 et id_ORG>=028233999
alors id_ORG= UR001

id_DEST<= 028210000 et id_DEST>=028233999

alors id_DEST= UR001

ect.....

comment traduire cela? sachant qu'il faudra faire cela d'as qu'il récupère la valeur de l'appelant et l'appelé.
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
12 juin 2009 à 16:40
Eh bien déjà il te faut stocker tes données quelque part !!!
Lire ton fichier contenant les renseignements les ura et plages.
Tu devras juste insérer ton traitement lorsque tu récupéreras tes informations de ton fichier CAA.
La façon de faire est dans un de mes postes précédent !!

The possible meet the impossible to become the possimpible !!
0
Rejoignez-nous