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,
donc si j'ai bien compris , ton programme doit lire des fichiers textes et les mettre dans des matrices. pour lire un fichier txt les choix c pas ce qui manque!!! maint faudra juste pense a la structure de ton fichier txt genre tu les écris ligne par ligne ou colone par colone. met un example de fichier txt si tu ve. pour essayer de voir l'algo.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
pas plus de précisions ? pas de morceau de 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

slt;
oui exactement , pour lire les fichiers texts j'arrive à le faire, mais pour mettre les données dont g besoins dans une matrice, cela j'arrive pas à le faire.
il me faut un algorithme en java qui me permettra d'extraire juste les données dont g besoin de ces fichiers et les mettre sous forme d'une matrice;  dans cette matrice faudra que j'aille le numero de l'appelant et celui de l'appelé et entre l'appelant et l'appelé inserer la durée de leur appels.  je dispose d'un fichier qui contient l'ura de chaque plage de numéro et un autre fichier qui contient l'ura qui correspond à chaque centre, et un autre fichier qui contient le numéro de l'appelant et celui de l'applé et la durée et d'autre champs. donc le principe c'est de voir à quelle plage  le numéro  il appartient puis une fois on a detecté à quelle plage il appartient, faudra voir l'ura correspondant, une fois on detecte l'ura de l'appelant et de l'appelé la case entre eux doit etre remplie par leur durée d'appel.
je sais pas si j'étais assez clair.
merci bcp c gentil à vous de m'aider.

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

Bonjour,
peux tu mettre les fichier sur un lien pour que je puisse voir.
boncourage
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Bonjour,

Pas de langage SMS s'il te plait.

"avec java"

Si c'est avec java, la question est au mauvais endroit : ici tu es sur cppfrance.

[ déplacé sur javafr ]
Messages postés
58
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour,
en fait je sais pas comment faire passer  ici ,les fichiers text avec lesquels je travaille.
est ce qu'il est imperatif de voir les fichiers pour me proposer un code?
merci encore pour votre aide.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Copier/coller !!
il nous faut une structure pour travailler sinon on peut partir dans tout les sens.

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

ce code pour lire mon fichier, j'ai fait la meme chose  pour les deux autre fichiers

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){
   System.out.println(str);
   str = fichier.readLine( );
   
  }
}}

pour le contenu des fichiers :
mon fichiers ura:
ce fichier contient les plages( seuil min et seuil max) à laquelle apartient chaque operateur; pour UR001 et UR002  jusqu'à UR512 ( pour le moment je travaille juste sur un échantillon d'ura UR001 et UR002), ces ura corresponde au fix.
Ura               ;seuil_min        ;seuil_max;

UR001        ;028210000 ;028233999;
UR002        ;028292000 ;028292999;
mobile IAM ;010330000 ;078999999;
intern            ;00000        ;022920999;
meditel         ;020000000 ;082039999;
wana           ;038000000 ;088199999;




mon fichier centre:
indique pour chaque URA correspond un centre au quel appartient soit l'appelant ou l'appelé ( c'est Ura sont juste un echantillon):

 Ura  ; centre
UR001;Agadir Al Qods DMS
UR002;Aït Baha (U.DMS)
UR003;Ait Melloul 1 (U.DMS)
UR004;Assa (U.DMS)
UR005;Bensargao (U.DMS)

 
 
mon fichiers CAA:

c'est un fichiers qui contient plusieurs champs mais dont g besoin  se sont trois champs:
N_ORG et N_DEST et durée

N_ORIG   ; ID_SWITCH_ORIG  ;N_DEST   ;TYPE_DEST ;ID_SWITCH_DEst; D_SEBCOM       ;durée; Type_Ticket ;ID_jour; ;ID_SEMAINE;ID_Heure;

028877888 ;DDDDD                   ;052836003 ; 01               ;                           ; 20081001091449 ; 36   ;90              ; 20081001 ;2008100040; 9            ;
035271374; FFFF                       ;074387974 ; 01               ;                           ;20081001084525; 1      ;90               ;20081001;2008100040;11             ;

Donc comme je l'ai expliqué, il faudra dans un premier lieu tester le numéro appelant et appelé à quelle plage ils appartiennent pour determiner l'urade chacun d'eux, puis determiné la durée de leur appels et pou cela il faut extraire ces donnée qu'il nous faut de ces fichiers, donc ma question:
comment on fait pour extraire les données dont on a besoin parmis d'autre.
comment on fera le test pour savoir à quelle plage appartient chaque numéro appelant et appelé
et puis comment mettre le resultat sous forme de matrice de tel façon à avoir dans la case la durée d'appel entre l'appelant et l'appelé.

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

En ce qui concerne ton fichier CAA, ça serait bien si tu pouvais le convertir au format XML, les données seront accessibles plus facilement.

Sinon (pour tout tes fichiers) tu peux toujours lire une ligne entière et utilisée la fonction Split d'un string sur le caractère ';'. Tu récupères uniquement les données qui t'intéresse par la suite pour le fichier CAA (pour le reste tu devras récupérer toute les données).
Le nombre de lignes pouvant varié, utilise des tableaux dynamiques!

Pour connaître l'ura, tu n'as qu'à vérifier si le numéro est supérieur au seuil max (tant qu'il l'est, tu parcours ton tableau). Quand le numéro est inférieur, tu connaitras ta plage (et l'indice du tableau aussi normalement).
Il te suffira d'aller dans le tableau où tes données concernant les centres sont stocké et tu vas directement à l'indice que tu as récupéré.

PS: Perso je ferais peut être un seul tableau pour regrouper les données des ura, du genre :
tab[0] = ur001
tab[1] = seuil min
tab[2] = seuil max
tab[3] = centre

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;
 stp mais comment recuperer juste les champs dont j'ai besoin parmi d'autre?
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

La structure de ton fichier est la même soit :
N_ORIG   ; ID_SWITCH_ORIG  ;N_DEST   ;TYPE_DEST
;ID_SWITCH_DEst; D_SEBCOM       ;durée; Type_Ticket ;ID_jour;
;ID_SEMAINE;ID_Heure;

Tu lis les lignes

String str;
str = fichier.readLine( );
 
while (str != null){
   System.out.println(str);
string[] tab = str.Split(...) // tu récupèreras un tableau du style
//tab[0] = N ORIG
//tab[1] = ID_SWITCH_ORIG ainsi de suite

   str = fichier.readLine( );
  }
dans ta boucle tu n'as plus qu'à récupérer ce qui t'intéresse, dans ton cas tu vas récupérer au moins tab[0] puisque tu as besoin du numéro d'origine...

Mais avec la structure XML c'est toujours mieux, mais enfin il faudra faire des traitements supplémentaires

understood?

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

bonjour,
j'ai fait cela pour recuperer tous le fichier,         
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){
            System.out.println(str);
            str = fichier.readLine( );
            
        }
    
    
    
}
}

alors si je veux récuperer juste les champs qui m'interesse faudra que je les insère sous forme de
                                      tab[0]= ID_ORG

                                     tab[1]=ID_DEST ...... ect 

et puis je fais appel au champs dont j'ai besoin, c'est ça?
je vois pas trop comment jvais faire pour l'algorithme.
merci pour votre aide et pacience.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

 Salut
tu dois spliter le string str avec le caractère ';', sa te renverra un tableau de la sorte tab[0]= ID_ORG... bien sûr ID_ORG sera remplacé par le numéro de télépehone après tu n'auras plus qu'à récuper les valeurs dans le tableau des indices qui t'intéresse

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;
voilà c'est ce que j'ai fait:

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

   
}
}

et voilà ce que j'obtiens:

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:12)
comment faire pour obtenir chacune dans une colonne , et non pas dans une seule colonne.

merci encore pour votre aide précieuse.
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

Bonjour,
l'instruction de permet de lire la ligne entiére chose qui facilite pas les choses str = fichier.readLine( ).  ben on est sous java quand meme!!!!!. donc tu défini une classe a toi qui contiendra tes données de ton choix et avec ça tu rajoutera une méthode qui te permet de passer d'un string a un objet de la classe, enfin un set(string). donc c le traitement qu'il faut faire c de séparer tes données dans la ligne , chose qui est déja faite avec ";". ce qu'on appel parser en java.
Boncourage
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Ton erreur indique que ton indice dépasse les limites du tableau, toutes les lignes sont-elles vraiment identique ?
Maintenant que tu as plus ou moins compris le principe à toi de jouer !!

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

slt, merci bcp pour votre aide.
en fait j'ai pas trop compris ce que vous m'avez dit, shui debutante en jave , ce qui fait il m'est difficil de comprendre rapidement certaines choses.
je crée une classe qui contient quoi exactement?
et concernant les lignes elle sont pas identique, comment faire  alors?
merci encore de bien vouloir m'éclaircir.
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Si ton fichier n'a pas toujours ce format :
N_ORIG   ; ID_SWITCH_ORIG  ;N_DEST   ;TYPE_DEST ;ID_SWITCH_DEst; D_SEBCOM       ;durée; Type_Ticket ;ID_jour; ;ID_SEMAINE;ID_Heure;

 eh bien pour ton traitement c'est râpé !!!
Si une ligne contient moins d'éléments tu risques de sélectionner de mauvaises données ou bien sortir tout simplement générer ton erreur...

PS: n'oublie pas d'écrire correctement sur le forum

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,
j'arrive à afficher tout le fichier, et même n'importe quelle ligne que je veux, le problème qui se pose c'est quand je choisis mes champs que je veux qu'il s'affiche:

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

il y'a un chevauchement , c'est à dire que mes trois colonnes choisies, s'affichent en une seule, est ce que je dois créer des classes pour chaque fichier où j'identifie chaque champs et puis je fais appel à ces champs?! si c'est oui comment faire s'il vous plait?
ps: est ce que c'est interdit d'abréger les  mots en ce forum?