Extraire des données d'un ficher

Signaler
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012
-
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012
-
Bonjour,
Je suis débutante dans le programmation en java et je cherche à savoir comment extraire des données d'un fichier texte pour les mettre ensuite dans une base de données.J'ai cherché dans les forums mais j'arrive pas à trouvé ce que je cherche.Mon but c'est d'extraire par exemple la ligne encadrée en rouge puis la mettre dans un tableau.SVP j'ai besoin de votre aide et je serais vraiment très reconnaissante.Ci joint vous trouveriez une partie du contenu de mon fichier texte qui a cette structure et ki se repete plusieurs fois dans le fichier.Merciiiiii

15 réponses

Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

END OF REPORT

MSCi EJPMSS11 2012-02-05 22:08:01

TRAFFIC MEASUREMENT REPORT PART 23/ 274 HANDOVER MEASUREMENT

SAMPLE DATE: FROM 2012-02-05 21:00:00.00
TO 2012-02-05 22:00:00.00

MSC NUMBER: 2126168

CELL IDENTIFIER
MCC / MNC / LAC / CI / BSC / NAME
604 01 00213 54386 00002 BTS54386

INTRA CELL HANDOVER OK/ FAIL
2/ -

NEIGHBOUR CELL/SA TO NEIGHBOUR FROM NEIGHBOUR
MCC / MNC / LAC / CI/SAC OK / FAIL OK / FAIL
604 01 00213 54385 31 - 28 -
604 01 00213 53397 16 - 22 -
604 01 00213 54384 21 - 23 -
604 01 00090 15672 0 1 2 0
604 01 00213 53794 10 - 16 -
604 01 00090 15565 1 0 1 0
604 01 00090 15508 2 0 0 0
604 01 00213 22178 25 - 18 -
604 01 00213 53395 4 - 2 -
604 01 00090 16007 1 0 0 0
604 01 00090 15566 1 0 0 0
604 01 00099 21243 0 0 3 1

PART 23/ 274
END OF REPORT

Je veux reccupérer la ligne de CELL IDENTIFIER autrement dit juste les entiers au dessous de CELL IDENTIFIER svp comment proceder ??

Salut,

Supposons que tu utilises la classe Scanner et que le fichier correspond strictement à la structure indiquée.

Il faut lire le fichier (disons report.txt) jusqu'à trouver la ligne CELL IDENTIFIER

if(line.startsWith("CELL IDENTIFIER"))
           {


puis lire les 2 lignes qui suivent, la seconde étant la ligne contenant les entiers (plus le "NAME").

Cette ligne contient (d'après l'exemple) :
"604 01 00213 54386 00002 BTS54386"

On constate que les "items" sont séparés par un espace et qui donc peuvent être copiés facilement dans un tableau de Strings en utilisant split


Cordialement,

...\ Dan /...

Ps,

J'ai oublier de préceser que split est une méthode de la classe String (dans notre cas)


...\ Dan /...
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Voici le code ke j'ai essayé d'écrire mais je n'obtient aucun resultat, j'ai besoin de votre aide svp.


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;


public class Extraire {

public static void main(String[] args) {

String chaine="";
String fichier ="C:/Users/imilou/Desktop/report.txt";

//lecture du fichier texte
try{
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
while ((ligne=br.readLine())!=null){
// if (ligne.contains("CELL IDENTIFIER "))
if(ligne.startsWith("CELL IDENTIFIER"))
{
String[] st = ligne.split(ligne,' ');
System.out.println(st[1]);
}
chaine+=ligne+"\n";
}
br.close();
}
catch (Exception e){
System.out.println(e.toString());
}
}

}
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Bonjour j'ai pu récupérer les données voulus qui ce situes après CELL IDENTIFIER voici le code et je vous remercie énormément damino pour votre aide.


import java.io.*;
//import java.util.*;
import java.util.regex.Pattern; //<<<<<<<<<<<<<<<<<<<<<<<<

class Lectur{

public static void main(String[] args){

String filePath = "C:/Users/imilou/Desktop/report.txt";
String garder = "";

try{

BufferedReader buff = new BufferedReader(new FileReader(filePath));

try {
String line;
// Lire le fichier ligne par ligne
// La boucle se termine quand la méthode affiche "null"


while ((line = buff.readLine()) != null) {
System.out.println(line);

// ajouter ces 3 lignes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
int index = line.indexOf(" BTS"); // partie commune des lignes à garder
if(index > 0) // si on trouve "BTS"
garder+= line + "|";

}

// Ajouter les lignes qui suivent ... <<<<<<<<<<<<<<<<<<<<<<<<<
//System.out.println("\n\ngarder = " + """ + garder + """);

Pattern pattern = Pattern.compile("\\|"); // import java.util.regex.Pattern;
String[] tabGarder = pattern.split(garder); // pour mettre les lignes conservées
// dans le tableau tabGarder

System.out.println("");

// Résultat:
for(int i = 0; i < tabGarder.length; i++)
{
String lGardee = tabGarder[i];
System.out.println(lGardee);

} // ... Jusqu'ici <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

buff.close(); //Lecture fini donc on ferme le flux
}

catch (IOException e){
System.out.println(e.getMessage());
System.exit(1);
}

}
catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
}


Maintenant je cherche à récuperer dans une autre table les données de cette partie plus précisement les lignes qui contiennent les entiers,comment faire??

NEIGHBOUR CELL/SA TO NEIGHBOUR FROM NEIGHBOUR
MCC / MNC / LAC / CI/SAC OK / FAIL OK / FAIL
604 01 00213 54385 31 - 28 -
604 01 00213 53397 16 - 22 -
604 01 00213 54384 21 - 23 -
604 01 00090 15672 0 1 2 0
604 01 00213 53794 10 - 16 -
604 01 00090 15565 1 0 1 0
604 01 00090 15508 2 0 0 0
604 01 00213 22178 25 - 18 -
604 01 00213 53395 4 - 2 -
604 01 00090 16007 1 0 0 0
604 01 00090 15566 1 0 0 0
604 01 00099 21243 0 0 3 1

PART 23/ 274

Re,

Voici ce qu'on peut faire même s'il y a mieux:

Remarque: que faire avec les tirets (-) ?

         {
            String lesLignes = ""; // les lignes à traiter
            try
            {
               scanner = new Scanner(new File("cellIdentifier.txt"));
               try
               {
                  while (scanner.hasNextLine())
                  {	
                     String line = scanner.nextLine();
                     //if(line.startsWith("CELL IDENTIFIER")) NEIGHBOUR CELL
                     if(line.startsWith("NEIGHBOUR CELL"))
                     {
                     // Lire la ligne suivant "NEIGHBOUR CELL..."
                        line = scanner.nextLine();
                     // Et la première contenant les entiers
                        while (scanner.hasNextLine())
                        {
                           line = scanner.nextLine();
                           if(line.startsWith("PART"))
                              break;
                           lesLignes += line;
                        } 
                        String[] lesItems = lesLignes.split(" +"); // le plus de (" +") permettrait
                     	                                      // d'accepter plusieurs espaces.
                        for(String it : lesItems) System.out.println(it);
                        break;
                     }	
                  }
                  System.out.println("");
               
               } 
               finally
               {
               // dans tous les cas, on ferme nos flux
                  scanner.close();
               }
            }
               catch (IOException ioe)
               {
               //e.printStackTrace();
                  System.out.println("Erreur --" + ioe.toString());
               }
         }


Le résultat est dans le tableau lesItems mais avec le "-".

Cordialement,

...\ Dan /...
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Merciii Bien damino vous m'avez bcp aidé, j'ai utilisé le code ke vous m'avez écrit le probleme k'il n'affiche pas les lignes apres NEIGHBOUR CELL, il sort de try et affiche le message System.out.println("") ke j'ai changé avec System.out.println("eeee") pour pouvoir voir si il fait le try ou nn.
une 2ieme kestion: j'ai testé le meme code pour extraire CELL IDENTIFIER est ça marché bien mais juste pour une ligne de CELL IDENTIFIER alors ke mon fichier contient plusieurs CELL IDENTIFIER.comment faire?
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Bonjour,

Le probleme de l'afficahge des lignes apres NEIGHBOUR CELL est résolu.En effet je dois mettre 2 espaces puis NEIGHBOUR CELL dans if(line.startsWith(" NEIGHBOUR CELL")).
Il me reste comment pouvoir extraire les lignes concernées sur tout le fichier puisk le le code en haut permet de le faire juste sur la structure alors ke je possede un fichier qui contient cette structure pluuusieurs fois et merciiiiii bcp.

Re,

Pour CELL IDENTIFIER et INTRA (S'il y a toujours INTRA après les lignes CELL ...) il suffirait de faire comme pour NEIGHBOUR CELL et PART et remplacer NEIGHBOUR CELL et PART par CELL IDENTIFIER et INTRA.

...\ Dan /...
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Oui c'est deja fait et ça marche tres bien merciii bcp. Ce ke je cherche maintenaint c'est de pouvoir recuperer les lignes de CELL IDENTIFIER pour mon fichier ki contient plusieurs fois la structure déclarée en haut. Le code ke j'ai me permet de recuperer juste la premiere structure du fichier alors k'il en reste bcp.

Re,

Regarde si ce code qui permet de traiter plusieurs groupes "CELL IDENTIFIER" / "INTRA" et "NEIGHBOUR" / "PART" te conviendrait:

         {
            String lesLignesNeigh = ""; // les lignes à traiter
            String lesLignesCell = ""; // les lignes à traiter
            
            String[] itemsNeigh = new String[1];
            String[] itemsCell = new String[1]; 
            try
            {
               scanner = new Scanner(new File("report.txt"));
               try
               {
                  while (scanner.hasNextLine())
                  {	
                     String line = scanner.nextLine();
                     line = line.trim(); // supprimer les éventuels espaces en début et fin de ligne
                     //if(line.startsWith("CELL IDENTIFIER")) NEIGHBOUR CELL
                     if(line.startsWith("NEIGHBOUR CELL"))
                     {
                     // Lire la ligne suivant "NEIGHBOUR CELL..."
                        line = scanner.nextLine(); // si "NEIGHBOUR CELL..." est toujours suivie de la
                                                   // la ligne "titre des colonnes"
                     // Et la première contenant les entiers
                        while (scanner.hasNextLine())
                        {
                           line = scanner.nextLine();
                           if(line.startsWith("PART"))
                              break;
                           lesLignesNeigh += line + " ";
                        }
                        itemsNeigh = lesLignesNeigh.split(" +"); // le plus de (" +") permettrait
                                                              // d'accepter plusieurs espaces.
                        System.out.println("\n\nNEIGHBOUR CELL");
                        for(String itn : itemsNeigh) System.out.println(itn);
                     } 
                     else
                        if(line.startsWith("CELL IDENTIFIER"))
                        {// Lire la ligne suivant "CELL IDENTIFIER"
                           line = scanner.nextLine(); // si "CELL IDENTIFIER" est toujours suivie de la
                                                   // la ligne "titre des colonnes"
                        // Et la première contenant les entiers
                           while (scanner.hasNextLine())
                           {
                              line = scanner.nextLine();
                              if(line.startsWith("INTRA"))
                                 break;
                              lesLignesCell += line + " ";
                           }
                           itemsCell = lesLignesCell.split(" +");
                           System.out.println("\n\nCELL IDENTIFIER");
                           for(String itc : itemsCell) System.out.println(itc);
                        }
                  }
                  System.out.println("");
               
               } 
               finally
               {
               // dans tous les cas, on ferme nos flux
                  scanner.close();
               }
            }
               catch (IOException ioe)
               {
               //e.printStackTrace();
                  System.out.println("Erreur --" + ioe.toString());
               }
         }



Mais attention à la taille, si c'est très gros, il vaudrait mieux créer deux fichiers texte, contenant l'un les "CELL IDENTIFIER" et l'autre les "NEIGHBOUR CELL"

Cordialement,

...\ Dan /...
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Merciii bien ça fonctionne trèès bien.Mercii encore une fois
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Après avoir extrait les données du fichier je dois les mettre dans une base de données MySQl.Comment faire pour stocker les lignes de CELL IDENTIFIER dans la base de données et merciii bien.
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Salut j'ai modifié le code un peu pour mettre chaque ligne dans un string puis le decomposer afin de separer chak champs de la meme ligne à part mais je sais pas comment mettre chaque champs de cell identifier dans la base de données??help please !!!
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;


public class Cellule1 {

public static void main(String[] args){
{
String lesLignes = ""; // les lignes à traiter
try
{
Scanner scanner = new Scanner(new File("C:/Users/Desktop/report.txt"));
try
{
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
//if(line.startsWith("CELL IDENTIFIER")) NEIGHBOUR CELL
if(line.startsWith(" NEIGHBOUR CELL"))
{
// Lire la ligne suivant "NEIGHBOUR CELL..."
line = scanner.nextLine();
// Et la première contenant les entiers
while (scanner.hasNextLine())
{
line = scanner.nextLine();
if(line.startsWith("PART "))
break;
lesLignes += line;
}
String[] lesItems = lesLignes.split(" +"); // le plus de (" +") permettrait
// d'accepter plusieurs espaces.

for(String it : lesItems) System.out.println(it);
for(int i = 0; i < lesItems.length; i++)
{
String la = "";
la = lesItems[i];
System.out.println(la);

String[] decompose = la.split(" +");
}
break;
}
}

}
finally
{
// dans tous les cas, on ferme nos flux
scanner.close();
}
}
catch (IOException ioe)
{
//e.printStackTrace();
System.out.println("Erreur --" + ioe.toString());
}
}
}
}
Messages postés
13
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
3 août 2012

Salut
J'ai pu mettre les lignes de NEIGH CELL dans une variable string puis j'ai decoupé le ligne en des chaines pour pouvoir mettre chaque champs de la meme ligne dans une variable.Cette table est bien faite mais je me bloque sur une chose,Je cherche à mettre le champ de CI dans CELL IDENTIFIER dans une autre variable de NEIGHBOUR CELL parce ke en fait chaque NEIGBHOUR CELL est issue d'un et un seul CELL IDENTIFIER.La structure du fichier est déjà définit dans le forum:ligne qui commence par un CELL IDENTIFER puis suivi de la liste de NEIGHBOUR CELL,la structure se repete dans le fichier.
Voici le code
//La classe NEIGHBOUR_CELL



public class NEIGHBOUR_CELL{
String MCC;
String MNC;
String LAC;
String CI;
String TO_OK;
String TO_FAIL;
String FROM_OK;
String FROM_FAIL;



public NEIGHBOUR_CELL(String mCC, String mNC, String lAC, String cI, String tO_OK,
String tO_FAIL, String fROM_OK, String fROM_FAIL) {
super();
MCC = mCC;
MNC = mNC;
LAC = lAC;
CI = cI;
TO_OK = tO_OK;
TO_FAIL = tO_FAIL;
FROM_OK = fROM_OK;
FROM_FAIL = fROM_FAIL;
}
public NEIGHBOUR_CELL() {
// TODO Auto-generated constructor stub
}
public String toString()
{

String a ="MCC "+MCC+"\n"+"MNC "+MNC+"\n"+"LAC "+LAC+"\n"+"CI "+CI+"\n"+"TO_OK "+TO_OK+"\n"+"TO_FAIL "+TO_FAIL+"\n"+"FROM_OK "+FROM_OK+"\n"+"FROM_FAIL "+FROM_FAIL+"\n\n";
return a;

}



}

//la classe Main


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
String filePath = "C:/Users/Desktop/report.txt";

try{

BufferedReader buff = new BufferedReader(new FileReader(filePath));

try {
String line;
// Lecture du fichier ligne par ligne. Cette boucle se termine
// quand la méthode retourne la valeur null.
while ((line = buff.readLine()) != null) {

ArrayList<Ligne> al = new ArrayList<Ligne>();
String[] chaine1=new String[8];
String MCC;
String MNC;
String LAC;
String CI;
String TO_OK;
String TO_FAIL;
String FROM_OK;
String FROM_FAIL;

line = line.trim();
if(line.startsWith("NEIGHBOUR CELL"))
{
line = buff.readLine();
while ((line = buff.readLine()) != null) {
if(line.startsWith("PART"))
break;
StringTokenizer tok=new StringTokenizer(line," ");
int n = 0;
while(tok.hasMoreTokens()){//repete la boucle tant que il y a un espace
chaine1[n]=tok.nextToken();//nexttoken extrait des sous-chaine
n++;
}

MCC = chaine1[0];
MNC = chaine1[1];
LAC = chaine1[2];
CI = chaine1[3];
TO_OK = chaine1[4];
TO_FAIL = chaine1[5];
FROM_OK = chaine1[6];
FROM_FAIL = chaine1[7];



NEIGHBOUR_CELL li = new NEIGHBOUR_CELL(MCC,MNC,LAC,CI,TO_OK,TO_FAIL,FROM_OK,FROM_FAIL);

al.add(li);
li=null;
}
int i=0;


for(i = 0; i < al.size(); i++)
{
System.out.println("donnée à l'indice " + i + " \n" + al.get(i).toString());
}


//------------------------------------------------------------------------------------------------------------

}
}
}
finally {
// dans tous les cas, on ferme nos flux
buff.close();
}
} catch (IOException ioe) {
// erreur de fermeture des flux
System.out.println("Erreur --" + ioe.toString());
}
//Fin du programme

}

}