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

bonjour,
j'ai réglé le problème, mais ça génère des erreurs, en fin je résume:
j'ai trois classe: catfichier, ura et centre.
dans chacune des classes URA et centre j'ai une méthode approprié à chacune, et c'est dans ma classe catfichier où je fais appel à ces méthodes. et voilà le code de catfichier:

import java.io.*;
import java.util.StringTokenizer;
public class CatFichier  {
    public static void main(String [] args) throws IOException  {
   
       
BufferedReader fichier = new BufferedReader(new FileReader("D:// fichier//CAA2.CSV"));
String str;

//centre.getCentre( "Switch_orig");
str = fichier.readLine( );
    while (str != null){
        String tab1[]=str.split(";");
       
        int type_dest;
        String ura_dest;
        String ura_orig;
   
       
   
        ura_dest= URA.getUraOrig(tab1[2]);//  l'appel de cette méthode consite à  faire le test sur le numéro dans quel plage se trouve et lui attribué son ura correspondant.
      
       
        ura_orig= URA.getUraOrig(tab1[0]);// de meme pour celle ci
       
   
        System.out.println(ura_orig +" ;    "+ ura_dest+";"+tab1[6]);
        str = fichier.readLine( );
       
   
        }
    while (str != null){
        String tab1[]=str.split(";");
       
       
        String centrecentre;
       
        centrecentre= centre.getCentreURA(tab1[1]); // je fais appel à ma deusième méthode, cette méthode consiste à attribuer le centre correspondant une fois l'ura trouvé.
        System.out.println(centrecentre);
        str = fichier.readLine( );
       
       
       
       
    }
    }}

En tout comment faire appel à deux méthode différents dans une meme classe.

merci encore pour vodre aide précieuse.
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

en fait le problème dans le code au dessous, c qu'il ne prend en considération que la première méthode la seconde , il ne l'exécute pas. svp aidez moi, shui en retard par rapport au délai au quel je dois rendre mon travail. merci bcp.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
excuse moi mes réponses sont assez longues mais je suis assez occupé en fait.
Bref, quand tu crées une classe, pour l'utiliser tu dois instancier un objet de cette classe
ex: URA ura = new URA( )
et après c'est ura.ma_methode(args) pour l'utilisation.

Ensuite à chaque fois tu relis le fichier, A EVITER au maximum puisque tu augmentes le temps de traitement....

En ce qui concerne ton appel à ta deuxième méthode, c'est normal qu'elle ne fonctionne pas puisque tu sors de ton premier while seulement quand tu as fini de lire le fichier c'est à dire quand ta variable 'str' est null !!

Etant à null elle ne rempli pas la condition pour ton second while donc tu ne peux pas rentrer dans la boucle.

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

bonjour,
merci beaucoup pour ton aide,
mon problème est tjs le même, quand j'exécute  y'a juste le premier while qui s'éxécute; l'autre while est ignoré, et quand j'ai enlevé  la lecture du fichier entre les deux while, et que je l'éxécute, il fait k repeter une ligne.
merci encore et dsl pour le derrangement.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
essaie plutôt quelque chose dans ce genre :

import java.io.*;
import java.util.StringTokenizer;
public class CatFichier  {
    public static void main(String [] args) throws IOException  {
   
       
BufferedReader fichier = new BufferedReader(new FileReader("D:// fichier//CAA2.CSV"));
String str;
int type_dest;
String ura_dest;
String ura_orig;
String centrecentre;

str = fichier.readLine( );
    while (str != null){
        String tab1[]=str.split(";");
        
        ura_dest= URA.getUraOrig(tab1[2]);       
        
        ura_orig= URA.getUraOrig(tab1[0]);        
            
        centrecentre = centre.getCentreURA(tab1[1]);       
        System.out.println(centrecentre);

        System.out.println(ura_orig +" ;    "+ ura_dest+";"+tab1[6]);
        str = fichier.readLine( );
       
   
        }
    
    }}

Je me suis basé sur ton code sans trop le changer.
Une seule boucle dans laquelle tu exécutes toutes tes méthodes d'un coup

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

merci, mais ça genère la meme chose:
il exécute la première et pour la deusième il retourne erreur.
j'arrive tjs pas à detecter pourquoi.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Donne moi le code de ta fonction getcentreura ! et l'erreur que retourné
vérifie les valeurs de tab

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

Le voilà, merci bcp:










import




java.io.BufferedReader;



import




java.io.FileReader;



import




java.io.IOException;

 




public








class

centre {



private

String

URA
;



private

String

Centre
;



public

String getURA() {



return




URA
;}



public





void

setURA(String ura) {


URA
= ura;}



public

String getCentre() {



return




Centre
;}



public





void

setCentre(String centre) {


Centre
= centre;}



public





static

String getCentreURA( String Switch_orig ){



try


{





BufferedReader fichier =





new

BufferedReader(


new

FileReader(

"D://centre.CSV"
));String str;

 




int




i = 0;

str = fichier.readLine();

String ura;

String centre;




while




(str !=


null

) {String tab2[] = str.split(


";"
);



if




((tab2[0] !=


null

) & (tab2[1] !=


null

) ) {

ura =(tab2[0]);



if

((Switch_orig)==ura)

{




return




tab2[1];

}

}

str = fichier.readLine();

}

 

}




catch




(IOException e) {


//




TODO

Auto-generated catch block

e.printStackTrace();


}








return




"erreur"
;}

 

 

 

 



public

centre() {



super

();


//

TODO

Auto-generated constructor stub

}


}





 
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Ta méthode est bonne, tu devrais éviter de mettre static !!
A chaque appel de fonction, tu parcours ton fichier, c'est une perte de temps et d'optimisation, je te l'ai déjà fait remarqué.
Au lieu de retourné "erreur", retourne plutôt "e.toString() tu auras plus de détails sur l'erreur ....

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

juste une petit clarification , si ça peut aider:
 dans mon fichier centre, il ya un code ura et le centre correspondant.
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

comment je peux éviter static? qu'est ce que je peux faire.
j'ai retourner e.toString , mais ça n'a rien donné, au lieu de retourner erreur , elle retourne e.toString sans trop de détail.

la première méthode , teste le numéro dans quel plage se trouve et me donne son ura et ça marche, pour la seconde, elle doit me donnez le centre à l'ura correspondant; sachant que dans mon fichier chaque ura lui correspond un centre.

désolé pour le dérangement, et merci encore.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Si tu avais fait comme je t'avais conseillé !!!!!
Extraire toutes tes données et les rassembler dans une matrice, tu n'aurais pas ce soucis...là tu dois faire des tas de recherches à chaque fois dans tes fichiers au lieu de ta matrice.

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

bonjour,


c'est parce que j'ai pas su comment faire, sinon j'aurai volentié suivie votre conseil, maintenant je dois faire avec ce que j'ai fait parce que j'ai pas le temps de tout changer pour le moment, aprés jvais tout revoir à tete reposé.

pourquoi il prend pas en considération la deusième méthode et me retourne juste l'erreur?
merci pour votre aide.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
s'il te retourne erreur, c'est que d'après ton code, une exception a été levée, maintenant il faudrait voir à quoi ressemble le message d'erreur pour pouvoir résoudre ton problème

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

bonjour,
en fait le problème résidait dans le code de la classe centre.
au lieu de faire :
if
((Switch_orig)==ura)

fallait faire:
if((Switch_orig.equals(ura)))

maintenant voici mon problème:

je ne veux que cette boucle s'éxecute, seulement si le type destination est 01 càd national:

while (str != null){
 
        String tab1[]=str.split(";");
    
       
        int type_dest;
        String ura_dest;
        String ura_orig;
        String centrecentre;
   
        ura_dest= URA.getUraOrig(tab1[2]);
        ura_orig= URA.getUraOrig(tab1[0]);
        //System.out.println( ura_orig);
        centrecentre= centre.getCentreURA(ura_orig);
       
       
   
       
       
       
        System.out.println(ura_orig +" ;    "+ ura_dest+"  ;"+centrecentre+"  ;"+tab1[6]+";"+tab1[3]);
        str = fichier.readLine( ); }

mais sinon si le type destination est international càd 02, alors j'ai pas besoin d'avoir le centre.

autrement dit j'ai besoin qu'il détecte en premier le type destination avant d'exécuter ma boucle.
 poser par exemple:
int a=1;
int b= 2;
et dire:
si (Integer.parseInt(tab1[3])== a) alors la boucle s'éxécute
sinon  j'aurai une autre boucle à exécuter.

merci encore de bien vouloir m'aider, j'ai pas su formuler mon idée en java.
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour,
voilà ce que j'ai fait:

import java.io.*;
import java.util.*;
public class CatFichier  {
    public static void main(String [] args) throws IOException  {

   
       
BufferedReader fichier = new BufferedReader(new FileReader("D://MAroc telecom//CAA2.CSV"));
String str;

str = fichier.readLine( );
    while (str != null){
        String tab1[]=str.split(";");
        int a=1;
        int b=2;

        int type_dest;
        String ura_dest;
        String ura_orig;
        String centrecentre;
        if(Integer.parseInt(tab1[3])== a){
       
   
       
        ura_dest= URA.getUraOrig(tab1[2]);
        ura_orig= URA.getUraOrig(tab1[0]);
        centrecentre= centre.getCentreURA(ura_orig);
       
       
        System.out.println(ura_orig +" ;    "+ ura_dest+"  ;"+centrecentre+"  ;"+tab1[6]+";"+tab1[3]);
        str = fichier.readLine( );
        }
       
        else if (Integer.parseInt(tab1[3])== b){
            ura_dest= URA.getUraOrig(tab1[2]);
            ura_orig= URA.getUraOrig(tab1[0]);
           
            System.out.println(ura_orig +" ;    "+ ura_dest+"  ;"+tab1[6]+";"+tab1[3]);
            str = fichier.readLine( );
        }
       
       
       
   
    }    }}
   
   
mais le problème quand il s'agit d'un numéro international, il me retourne erreur comme ce ci:
UR514 ;    Erreur  ;42;2

sachant que dans mon fichier URA, j'ai ceci:
seuil min      seuil max              URA
0                  22920999         international
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

Bonsoir,
en fait le problème résidait dans le fait que la plage de l'international n'est pas approprié aux numéros qui existent.

en fait j'aimerai savoir s'il existe un moyen de ne lire qu'une partie d'un numéro.
par exemple si j'ai  0033494965233, comment ne lire que la partie après le négatif çàd ne lire que: 494965233
merci pour votre aide.
<col style=\"width: 101pt;\" width=\"135\" />
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
il me semble qu'il y a une méthode substring ou quelque chose dans le genre

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

bonjour,
le problème avec substring c'est qu'elle ne fonctionne qu'on je lui attribue directement un numéro, par exemple cela:
 String C = "003456784321.";
                String D = C.substring(5);
                System.out.println(D);

ça me donne cela: 56784321.

voici mon problème:

je voudrais que cela se fasse sur tous les numéros international, çàd quand je fais appel à cela:

int b=2;
else if (Integer.parseInt(tab1[3])== b  ){
            ura_dest= URA.getUraOrig(tab1[2]);
            ura_orig= URA.getUraOrig(tab1[0]);  
            System.out.println(ura_orig +" ;    "+ ura_dest+"  ;"+tab1[6]+";"+tab1[3]);
            str = fichier.readLine( );

ce code veut dire, que si le type destination est internationnal  çàd tab1[3]=b, il fait le test de sa plage pour voir s'il existe vraiment dans une plage international, à ce moment il faudra qu'il extrait le négatif pour faire le test. çàd si le numéro est : 0034567328921, il doit ne prendre en considération que "567328921",  donc je sait pas comment appliquer le substring sur une méthode.

s'il vous plait aidez moi, faut que je résout cela aujourd'hui.
merci pour votre aide.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
Qu'est ce que tu entends pas appliqué substring à une méthode ??
tu peux appliquer substring à la valeur retournée par une méthode mais à une méthode

The possible meet the impossible to become the possimpible !!