Lire un .txt,specifier et après enregistrer dans une base Mysql

jayzman -  
 jayzman -
Bonjour,

je voudrai avoir un code qui peut lire un fichier .txt et après enregistrer dqns une base,j'ai dejà le code qui lit le fichier .txt mais je veut juste avoir le parametre dans le fichier,je ne sais pas m'exprimer mais je vous explique un peu
exemple:
fichier.txt
Heure            id                    table              CID                SRC
[08:15:01.285] /2271 (EVENT) internal-call-setup-fail (CID1=28158) (src-conf=0)
[08:15:06.23] /2271 (EVENT) internal-call-setup-fail (CID1=28158) (src-conf=0)
[08:15:08.123] /2271 (EVENT) internal-call-setup-fail (CID1=28158) (RNC1=2)


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

   class ADT    {
      
      public static void main(String[] args){ 
      
         String filePath = "D:\\Asa_zo\\macrogpeh\\GPEH_CALL_FAIL\\fichier.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);
                  int index = line.indexOf("internal-call-setup-fail"); // exemple de partie commune des lignes à garder
                  if(index > 0) // si on trouve "table"
                     garder+= line + "|";
                
               }
             
               //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("Trouvée: " + "\"" + 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); 
            } 
      } 
   }


et je voudrais savoir où je vais mettre le regex pour specifier et avoir le contenue que je veut,
Le Type est le nom de la table et le entre () est ses parametres.
merci
jayzman

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Si je prends :

    String[] lines = {
        "[08:15:01.285]  /2271  (EVENT) internal-call-setup-fail  (CID1=28158) (src-conf=0)",
        "[08:15:06.23]   /2271  (EVENT) internal-call-setup-fail  (CID1=28158) (src-conf=0)",
        "[08:15:08.123]   /2271  (EVENT) internal-call-setup-fail  (CID1=28158) (RNC1=2)"
    };

    Tu peux faire simplement comme ceci :

    for (String line : lines) {
        for (String part : line.split("\\s+"))
            System.out.println(part);
        System.out.println();
    }

    Ce qui donne :

    [08:15:01.285]
    /2271
    (EVENT)
    internal-call-setup-fail
    (CID1=28158)
    (src-conf=0)
    
    [08:15:06.23]
    /2271
    (EVENT)
    internal-call-setup-fail
    (CID1=28158)
    (src-conf=0)
    
    [08:15:08.123]
    /2271
    (EVENT)
    internal-call-setup-fail
    (CID1=28158)
    (RNC1=2)

    Ou plus finement :

    Pattern pattern = Pattern.compile("\\[(.*)\\]\\s+\\/(\\d+)\\s+\\((.*)\\)\\s+([^\\s]+)\\s+\\((.*)\\)\\s+\\((.*)\\)");
    
    for (String line : lines) {
        Matcher matcher = pattern.matcher(line);
        if (matcher.find()) {
            for (int i = 1; i <= matcher.groupCount(); i++)
                System.out.println(matcher.group(i));
        }
        System.out.println();
    }

    Ce qui donne :

    08:15:01.285
    2271
    EVENT
    internal-call-setup-fail
    CID1=28158
    src-conf=0
    
    08:15:06.23
    2271
    EVENT
    internal-call-setup-fail
    CID1=28158
    src-conf=0
    
    08:15:08.123
    2271
    EVENT
    internal-call-setup-fail
    CID1=28158
    RNC1=2
    0
    1. jayzman
       
      Bonjour KX,
      merci pour votre réponse ça a marché,
      Et comment je fais pour l'enregistrer dans la base de donnée
      Si le résultat est stocker dans un seul variable?
      merci,
      Jayzman
      0