IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Traiter les lignes commençant par un espace


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Par défaut Traiter les lignes commençant par un espace
    Bonjour,

    je cherche à supprimer les 30 premiers caractères des lignes d'un texte sauf celles commençant par un espace ou une tabulation

    texte initial:

    Potentiels
    Cher Confrère,
    coucou
    oui
    J'ai pu voir le soleil

    Cadre
    rené
    dans le cadre
    toto

    texte final:

    Cher Confrère,


    J'ai pu voir le soleil



    dans le cadre
    toto


    Je cherche à trouver si la ligne ne commence par un espace pour faire un substring
    Mais mon code me fait une erreur
    Avez vous une idée ?

    Merci à ceux qui prendront le temps d'aider un novice


    Voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    File file2= new File("c:/test2.txt");
     
        	BufferedReader br2 = new BufferedReader(new FileReader(file2));
        	String ligne2;
      			while ((ligne2 = br2.readLine()) != null){
     
      				Pattern pattern = Pattern.compile("\\s+");
      				Matcher matcher = pattern.matcher(ligne2);
      			    matcher.find();
      				int debut = matcher.start();
     
      			if (debut>0)
      				ligne2 = ligne2.substring(30) ;
     
     
      			System.out.println(ligne2);
      			System.out.println(debut);

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Si tu mettais l'erreur, c'est à dire sa stacktrace, on pourrait bien plus facilement t'aider.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Bonjour,

    Cette ligne va envoyer une erreur de type IndexOutOfBoundsException si tu n'as pas + de 30 caractères dans ta ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne2 = ligne2.substring(30) ;
    De plus, si ton pattern reste le même, inutile de le reconstruire à chaque tour de ta boucle while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Pattern pattern = Pattern.compile("\\s+");
    while() {
     
    }
     
    // à la place de 
     
    while() {
        Pattern pattern = Pattern.compile("\\s+");
    }
    Encore une chose, ajoute un test sur le retour de matcher.find() pour savoir si le matcher à trouvé quelque chose.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Par défaut
    Merci d'avoir pris le temps de regarder mon code



    Voici l'erreur
    Exception in thread "main" 0
    java.lang.IllegalStateException: No match available
    at java.util.regex.Matcher.start(Unknown Source)
    at mathprim.main(mathprim.java:45)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    File file2= new File("c:/test2.txt");
     
        	BufferedReader br2 = new BufferedReader(new FileReader(file2));
        	String ligne2;
        	Pattern pattern = Pattern.compile("\\s");
     
     
      			while ((ligne2 = br2.readLine()) != null){
      				Matcher matcher = pattern.matcher(ligne2);
      			    matcher.find();
     
     
      				int debut = matcher.start();
     
      			if (debut>0)
      				ligne2 = ligne2.substring(30) ;
     
     
      			System.out.println(ligne2);
      			System.out.println(debut);

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    C'est parce-que matcher.find() n'a rien trouvé (retourné false), d'où l'intérêt de vérifier si il a trouvé quelque chose ou non. Ton pattern n'est peut-être pas bon.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Par défaut
    Cette ligne va envoyer une erreur de type IndexOutOfBoundsException si tu n'as pas + de 30 caractères dans ta ligne.
    il y au moins 30 caractères si l'espace compte car justement je veux récupérer le texte de chaque ligne après 30 caractères ou espace sachant qu'il peut y avoir des lignes vides dans le texte.

    je sais pas si je sui bien parti en cherchant les lignes qui ne commencent pas un espace, vous en pensez quoi ?

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    J'aurais fait plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(s.startsWith(" ") || s.startsWith("\t")) {
         if(s.length() >= 30) {
                s = s.substring(30);
         } else {
                // ce que tu veux
         }
    }

  8. #8
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Par défaut
    Merci
    Cela fonctionne super bien

    De mon coté j'ai trouvé d'une autre manière qui fonctionne bien aussi
    Avec la tienne toutes les lignes vide initial sont supprimés
    Avec la mienne elles restent mais par contre les lignes ayant moins de 30 caractères toi tu les suprimes ce qui est bien alors que moi je les mets en vide.


    Bref il faudrait que celles qui étaient vides reste présente pour une meilleur lecture du texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    File file2= new File("c:/test2.txt");
     
        	BufferedReader br2 = new BufferedReader(new FileReader(file2));
        	String ligne2;
        	Pattern pattern = Pattern.compile("\\s+");
     
     
      			while ((ligne2 = br2.readLine()) != null){
     
     
      			   int nbr=ligne2.length();
     
     
     
      			if (nbr>30)
      				ligne2 = ligne2.substring(30) ;
      			else
      				ligne2="";
     
      			System.out.println(ligne2);
     
     
      			}

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/05/2007, 11h10
  2. Réponses: 3
    Dernier message: 16/08/2006, 17h05
  3. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 14h16
  4. [Access] Récupérer les champs commençant par ...
    Par paflolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/02/2006, 11h35
  5. [langage] Trouvé les lignes commencant par [
    Par Nervix dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo