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

salut,
quel poste? vous voulez dire, la réponse est parmi ceux que vous m'avez déjà donné?
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Dernier post de la 1re page

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;
ah oui, c'est vrai, merci, je vais voir comment je vais faire.
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour,
depuis hier que j'essaye de faire ce que vous m'avez dit  dans le dernier poste de la page1, mais justement l'idée je l'ai dans ma tête mais je sais pas comment la traduire en java, si c'est possible de me dire comment je vais procéder techniquement et non pas théoriquement. merci encore pour l'aide, et désolé pour le dérangement.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

salut,


alors vu comment je vois les choses je dirais que les données que tu extrais du fichier CAA tu les mets dans un tableau de long ou double (ex: double [] tab).
Ton fichier avec les ura tu fais pareil mais avec un tableau de string (ex string [] ura).
après tu fais quelque chose du genre : 
i =0;
 while(tab[numero_indice] < double.parsedouble(ura[i][2]))
 i++;

de cette façon lorsque tu sors de la boucle, ton numéro appartiendra à l'ura ura[i][0]

PS : n'oublie pas d'initialiser i à chaque fois pour bien parcourir toute les ura en partant de la première

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

bonsoir,
merci pour les explications, voilà ce que j'ai fait, mais g des problèmes:



String t[][]=new String[915][3];
    int t2[][]=new int[1101][3];
   
        int i=0;
        str = fichier.readLine( );
            while (str != null){
                String tab[]=str.split(";");
                if(tab[0]!=null)
                {
                t[i][0]=tab[0];
               
                t[i][1]=tab[1];
                t[i][2]=tab[2];}
                //System.out.println("*****"+ t[i][0] +"****");
                //System.out.println(tab[0] +"  ;"+ tab[1]+"  ;" +tab[2]);
                str = fichier.readLine( );
                i++;

                }
            for(int j=1;j<=1101;j++)
            {if ( (nombre<=Integer.parseInt(t[i][1])) && (Integer.parseInt(t[i][0])<=nombre))
            {
                System.out.println(t[i][2]);
            }
           
            }

1/ comment déclarer un tableau de dimensions inconnues autrement dit un tableau dynamique.
2/ il faudra que je fasse des exceptions avant de replire mon tabeau vu que dans mon fichier URA : y'a des fois des vides dans chaque champs.
3/ est ce que c'est possible de me corriger mon code.

merci beaucoup pour votre aide précieuse.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

1) Alors déjà pour intercepter des exceptions, met ton code dans un bloc try-catch :
try {
// code sensible
}
catch(Exception e)
{
}

2) Un tableau dynamique : List ou ArrayList devrait te convenir
3) Je suis occupé ! donne moi les erreurs et je regarderais à la rigueur

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,
voilà
j'arrive à tester mon numéro dans quelle plage, il se trouve avec ça:

import java.io.*;
import java.security.KeyRep.Type;
import java.util.StringTokenizer;

public class Test {
    public static void main(String[] args) throws IOException {

        int nombre = 28803999;
       
        BufferedReader fichier = new BufferedReader(new FileReader(
                "D://MAroc telecom//URA1.CSV"));
        String str;

        String t[][] = new String[1086][3];
        int t2[][] = new int[1101][3];

        int i = 0;
        str = fichier.readLine();

        while (str != null ) {
            String tab[] = str.split(";");
            if ((tab[0] != null) & (tab[1] != null) & (tab[2] != null)) {
                t[i][0] = tab[0];

                t[i][1] = tab[1];
                t[i][2] = tab[2];
                System.out.println("*****" + t[i][0] + "****");
                System.out.println(i);
                i++;
                System.out.println(tab[0] + "  ;" + tab[1] + "  ;" + tab[2]);
            }
            str = fichier.readLine();

        }
        System.out.println(t[39][2]);
        for (int j = 1; j <= i; j++) {
            //System.out.println(j);
            if ((nombre <= Integer.parseInt(t[j][1]))
                    && (Integer.parseInt(t[j][0]) <= nombre)) {
                System.out.println(" mon ura est" + t[j][2]);
            }
        }

    }
}

le problème c'est que :
je sais pas comment généraliser ce code , çàd, dans ce cas j'ai travaillé sur un num et il m'a donnée son ura, or j'ai besoin qu'il identifie le numéro appelant ou le numéro appelé et le test automatiquement dans quelle plage il setrouve.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
eh bien je ne vois pas ton problème!
Tes premières étapes sont de lire les fichiers contenant les ura ( n'oublie pas d'utiliser les tableaux dynamiques, c'est plus pratique dans ton cas)

Par la suite tu effectues l'opération :
for (int j = 1; j <= i; j++)
 {

            if ((nombre <= Integer.parseInt(t[j][1])) && (Integer.parseInt(t[j][0]) <= nombre))
                System.out.println(" mon ura est" + t[j][2]);
 }

Dans ce cas là, normalement tu devrais pouvoir traiter toutes tes données.

Peut être ai-je mal compris ta question? Au fait, qu'entends tu par "généraliser ton code"?

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 c'est bon c réglé , voilà ce que j'ai fait dans la classe URA:
 

import

java.io.*;
import

java.security.KeyRep.Type;
import

java.util.StringTokenizer;

public

class URA {

public
static String getUraOrig (String num_orig){

try{

BufferedReader fichier =

new BufferedReader(
new FileReader(
"D://URA1.CSV"));String str;

 

int

i = 0;

str = fichier.readLine();

int

seuil_max;
int

seuil_min;
while
(str !null ) {String tab[] str.split(

";");

if ((tab[0] !=
null ) & (tab[1] ! =
null) & (tab[2] !=
null )) {

seuil_min = Integer. parseInt (tab[0]);

seuil_max = Integer.parseInt(tab[1]);

if (Integer.parseInt(num_orig) < = seuil_max && seuil_min <= Integer. parseInt (num_orig)){

return tab[2];}

str = fichier.readLine();

}

}

}

catch

(IOException e) {

// TODO Auto-generated catch blocke.printStackTrace();

}

return

"Erreur";}

et dans la classe de CAA:

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://CAA2.CSV"));
String str;
str = fichier.readLine( );
 while (str != null){
  String tab1[]=str.split(";");
  
  
  String ura_dest;
  String ura_orig;
  ura_dest= URA.getUraOrig(tab1[2]);
  
  ura_orig= URA.getUraOrig(tab1[0]);
  System.out.println(ura_orig +" ;    "+ ura_dest+" ; " +tab1[6]);
  str = fichier.readLine( );
  }
 }
}
et ça me donne ceci:

id_orig; id_dest          ; durée
UR013 ; Mobile IAM ; 36

UR013 ; MEDITEL ; 17

UR514 ; Mobile IAM ; 14

UR479 ; MEDITEL ; 1

UR479 ; UR405 ; 101

UR479 ; MEDITEL ; 87

UR338 ; Mobile IAM ; 67

UR074 ; MEDITEL ; 72

UR074 ; Mobile IAM ; 15

maintenant le problème c'est que il peut y avoir des ligne qui se répéte par exemple:
A appelle B  pour une durée de 21min
A appelle B pour une durée de 12min
A appelle B pour une durée de 30 min
il va afficher:

A              B                21min
A              B                12min
A              B                30min

alors  que je veux quand il trouvera comme cela , il  affiche:
 A           B               21min+12min+30min
ou
A             B             65 min
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Sa marche mais tu accèdes à ton fichier ura à chaque fois que tu veux connaître la plage d'un numéro, ça peut s'avérer très long si tu as un nombre de numéro important. C'est pour cela que je te conseille de lire ton fichier ura une seule et unique fois et de stocker les données dans ton application, puis tu effectues tes recherches dans tes données stockées.

En ce qui concerne ton dernier soucis d'optimisation je vais y réfléchir mais j'ai déjà une piste

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,
oui t'as raison alors comment faire s'il vous plait?
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

public
String getUra (String filename)
{



try


{
 List<String> myList = new List<String>(); // list de string
String[] mytab;





BufferedReader fichier =





new

BufferedReader(


new

FileReader(filename

)); String str


= fichier.readLine();



while




(str !=


null

) { String tab[] = str.split(


";"
);
mytab = new String [3]; // disons que tu ne veuilles que 3 éléments dans tab, les 3 premiers dans mon exemple

mytab[0]=tab[0];
mytab[1]=tab[1];
mytab[2]=tab[2];

myList.add(mytab); // tu ajoutes ton tableau de 3 éléments dans la liste qui représente un tableau dynamique à une dimension



str = fichier.readLine();





}







 
catch (IOException e) {

// TODO Auto-generated catch blocke.printStackTrace();

}

Pour ton optimisation tu peux utiliser quelque chose comme une liste. un numéro d'origine associé aux numéro de destination
ou utiliser une 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

bonsoir
s'il vous plait pour:
myList.add(mytab);

// tu ajoutes ton tableau de 3 éléments dans la liste qui représente un tableau dynamique à une dimension

j'ai pas compris, quel tableau dois ajouter?merci encore.

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

myList représente un tableau dynamique !! une liste tu n'as qu'à taper "list java" dans google et tu trouveras
mytab représente ton tableau statique contenant num_orig et autres...

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

tab[0] et tab[1] et  tab[2]représente  respectivement  seuil min et seuil max et ura.
le principe est tjs le meme tester le numéro dans quel plage et afficher son ura.

désolé j'ai vraiment pas compris, ça vous derrange de me dire excatement comment s'il vous plait.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Excuse moi mais je me suis perdu dans tout sa !! tu veux quoi comme explication au juste

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,voilà, j'ai un problème dans la partie en rouge, on me dit l'erreur que j'ai écrit en marron, sachant que j'ai déclaré ura comme un int et le centre comme un int et que dans le fichier, j'ai par exemple:  ura UR001 et centre agadir :

Multiple markers at this line
- line breakpoint:centre[line:49] - getcentre(String)
-the left_hand side of an assignment must be a variable

public static String getcentre (String URA_URA) {

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

int i = 0;

str = fichier.readLine();
 int ura;
while (str != null ) {
    String tab2[] = str.split(";");
    if ((tab2[0] != null) & (tab2[1] != null)) {
       
        ura =Integer.parseInt(tab2[0]);
       
        if (Integer.parseInt(URA_URA)=ura)
        {
           
        return    tab2[1];
       
        }
        str = fichier.readLine();
       
    }
   
}
}

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

Salut,
alors déjà pour tester une égalité utilise "==" et non "=" seulement.
Ensuite je t'avais dis d'utiliser des double et non des int car un numéro de téléphone contient 10 numéros et cela dépasse la capacité d'un int codé sur un octet. Mais bon tant que sa marche pourquoi pas !

De plus, ta condition dans ton if, tu devrais plutôt la placé au niveau de ton while (question de clarté).

Pourquoi ton ura et ton centre sont des int alors que ce sont des chaînes de caractères ???

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,
bah en travaillant avec des string ça m'a donnée beaucoup d'erreurs c'est pourquoi, j'ai travaillé avec des int meme si mon ura et centre sont des chaines de caractère, mais bon je sais que ça n'a pas de logique, je vais travailler avec des string.
pour mon if, il est dans la boucle while,
s'il vous plait si je veux appelé deux methode que j'ai fait  dans une meme classe comment  faire? sachant que pour appelé ma methode j'ai fait un while.