Extraire des données dans une matrice

Signaler
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009
-
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011
-
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

Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

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
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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( );
        }
    }

       
       
            }
       
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

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
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

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
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

merci encore , je vais essayer tout ça.
c'est très gentil à vous de m'aider.
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

Erreur Mec:
composligne[n]=tok2.nextToken()   ça vient faire quoi ici tok2 tu la définit avant?? a mon avis c tok.
salut
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

Désolé erreur de ma part j'ai écris vite c'est tok . c'est tt bon je pense. désolé pour l'erreur .
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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)
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

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
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

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 !!
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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( );
        }
    }
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

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 !!
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

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 !!
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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?
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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]);
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

dis est ce que ça te fait déja toutes les données???.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

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 !!
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

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é.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

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 !!