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

Eclipse Java Discussion :

expression régulière : retour à la ligne


Sujet :

Eclipse Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut expression régulière : retour à la ligne
    Bonjour,

    j'ai un problème tout simple, j'aimerais remplacer, sous eclipse, la séquence ";espace" par la séquence ";retour à la ligne" (ou espace et retour a la ligne sont les caractères " " et"\n, pas la suite de caractère "espace" ou "retour à la ligne"!)

    j'ai essayé de remplacer par ou même par ou ou encore mais rien n'y fait!

    Est-ce que c'est possible d'ajouter un retour à la ligne avec des expressions régulière? (j'ai pourtant trouvé la grammaire des expressions régulière sur le site d'eclipse) ou est-ce que le $ sert juste pour détecter les retours à la ligne?

    mobi

    PS : j'avais déjà posté ce topic ici mais je ne sais pas comment le déplacer, alors je l'ai recréer. Si un modo passe par la...
    mobi

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Tu peux faire un query replace de :

    par

    Ou utiliser Eclipse 3.3 qui peut faire cela automatiquement via des règles de clean-up du source.

    Une autre possibilité pour matcher des retours à la ligne c'est
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par natha
    Tu peux faire un query replace de :
    par
    il ne trouve pas la chaine
    Citation Envoyé par natha
    Une autre possibilité pour matcher des retours à la ligne c'est
    en fait, le problème c'est pas de trouver les retours a la ligne, c'est d'en créer.

    Exemple :

    j'ai le code suivant :

    et j'aimerais avoir après le remplacement
    Je réussi bien à trouver les séquences "; " mais je n'arrive pas à les remplacer par ";retour à la ligne"

    Et en fait, je me demande si les expressions régulières marchent dans le champs "replace with" ou si elles ne fonctionnent que dans le champ "find"

    mobi
    mobi

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    De mon expérience les retours à la ligne ne marchent effectivement que dans le find. D'où mon astuce de le capturer dans le find pour le placer dans le "replace with" via $1.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    ok, mais a besoin d'un retour à la ligne pour matcher et il n'y en a pas dans le source.

    J'ai aussi essayer de rechercher mais ça ne marche pas non plus puisque ajoute le ";" et zéro fois le retour à la ligne!


    J'ai également essayé mais eclipse produit une erreur : au niveau du "?#"
    mobi

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par mobi38
    a besoin d'un retour à la ligne pour matcher et il n'y en a pas dans le source.
    Ton source tient sur une seule ligne ?
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par natha
    Ton source tient sur une seule ligne ?
    euh... oui... enfin, j'ai un entrée tout à la fin de la chaine.

    La solution que j'ai trouvé pour l'instant c'est rechercher de le remplacer par et de s'acharner sur la touche replace all...

    il doit bien y avoir un moyen de tout changer d'un coup mais je bloque un peu. J'essayerais de trouver ça la prochaine fois.

    mobi
    mobi

  8. #8
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Utilise Eclipse 3.3 ...

    Ou alors tu peux écrire un utilitaire qui "nettoie" tes fichiers... J'ai fait un truc du genre pour modifier du vieux code en nouveau. Voici des méthodes qui peuvent t'intéresser (brut de décoffrage) :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    	/**
             * Process directory <code>dir</code> for files matching given <code>filenameFilter</code>.
             *
             * @param dir The directory to read.
             * @param filenameFilter Files to be updated.
             * @param level Level of recursion.
             * @param params Regex map for find/replace.
             */
    	private static void processDir(File dir, String filenameFilter, int level, Map<String, String> params) {
    		Assert.ensure(level < 100, "no infinite recursion");
    		// File d = new File(dirName) ;
    		RegexpFilenameFilter filter = new RegexpFilenameFilter(filenameFilter);
    		String[] list = dir.list();
    		int i;
    		if (list != null) { // some io sanity check
    			for (i = 0; i < list.length; i++) {
    				File f = new File(dir, list[i]);
    				Assert.ensure(f != null, "file is null");
    				Assert.ensure(list[i] != null, "list[i] is null");
    				if (f.isDirectory()) {
    					processDir(f, filenameFilter, level + 1, params);
    				} else if (filter.accept(dir, f.getName())) {
    					s_logger.debug("Processing file: " + f.getName() + " (" + f.getAbsolutePath() + ")");
    					replaceInFile(params, f, f);
    				}
    			}
    		}
    	}
     
    	/**
             * Replace params in desc file and save in target file.
             *
             * @param params Regex map for find/replace.
             * @param desc Desc file (template).
             * @param target Target file.
             */
    	private static void replaceInFile(Map<String, String> params, File desc, File target) {
    		// Desc file to string
    		StringBuffer sb = new StringBuffer();
    		FileReader fr = null;
    		BufferedReader br = null;
    		try {
    			fr = new FileReader(desc);
    			br = new BufferedReader(fr);
    			String line = null;
    			while ((line = br.readLine()) != null) {
    				sb.append(line);
    				sb.append(NEWLINE);
    			}
    		} catch (Exception e) {
    			s_logger.fatal(e.getMessage(), e);
    		} finally {
    			if (fr != null) {
    				try {
    					fr.close();
    				} catch (IOException e) {
    					// Nothing
    				}
    			}
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					// Nothing
    				}
    			}
    		}
     
    		// Replace params
    		String str = sb.toString();
    		for (Entry<String, String> param : params.entrySet()) {
    			try {
    				str = str.replaceAll(param.getKey(), param.getValue());
    			} catch (Throwable t) {
    				s_logger.fatal("key=" + param.getKey() + " | value=" + param.getValue(), t);
    			}
    		}
     
    		// Write target file
    		FileWriter fw = null;
    		try {
    			fw = new FileWriter(target);
    			fw.write(str);
    		} catch (Exception e) {
    			s_logger.fatal(e.getMessage(), e);
    		} finally {
    			if (fw != null) {
    				try {
    					fw.close();
    				} catch (IOException e) {
    					// Nothing
    				}
    			}
    		}
    	}
    "Map<String, String> params" correspond à une map contenant en clé les expressions régulières à trouver et en valeur, leur remplacement.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par natha
    Utilise Eclipse 3.3 ...
    eclipse 3.3 gère les retours à la ligne dans le champ "replace with"? En fait, j'utilise déjà eclipse 3.3!

    et merci bien pour ton code!
    mobi

  10. #10
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par mobi38
    eclipse 3.3 gère les retours à la ligne dans le champ "replace with"? En fait, j'utilise déjà eclipse 3.3!
    Euh non, mais tu as la possibilité de configurer un clean-up du code comme je l'ai dit dans ma première réponse.

    Preferences/Java/Code Style/Clean Up
    Et tu ajoutes dans la configuration : Remove trailing whitespaces on all lines

    Que de temps perdu... on serait allé plus vite si tu avais lu correctement ma première réponse...
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  11. #11
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Le problème viens du fait qu'on ne peux pas mettre de retour a la ligne dans la zone "remplacer par"
    C'est vrai que ca peut être un réel problème dans certain cas. Il serait peut être bien de remonter ca a la communauté Eclipse

    Ceci dit la solution de natha fonctionne bien.
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    en fait, je recherchais une solution qui fonctionne avec tous les eclipses (j'utilise aussi eclipse C++) qui n'a pas cette fonctionnalité!

    (mais j'avais bien lu ton premier post )

    mobi
    mobi

  13. #13
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par mobi38 Voir le message
    en fait, je recherchais une solution qui fonctionne avec tous les eclipses (j'utilise aussi eclipse C++) qui n'a pas cette fonctionnalité!
    Bah fallait le dire et poster ailleurs que dans Eclipse Java !

    Citation Envoyé par mobi38 Voir le message
    (mais j'avais bien lu ton premier post )
    Ah ouf quand même
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [expression régulière]Retours à la ligne
    Par ProgVal dans le forum Général Python
    Réponses: 2
    Dernier message: 06/06/2010, 06h09
  2. expression régulière sur plusieurs lignes
    Par [Hugo] dans le forum Langage
    Réponses: 6
    Dernier message: 01/07/2008, 12h48
  3. expression régulière : retour à la ligne
    Par mobi38 dans le forum Eclipse
    Réponses: 1
    Dernier message: 05/10/2007, 09h34
  4. Réponses: 9
    Dernier message: 01/06/2007, 17h58
  5. [debutant] Expression régulière : retour ligne
    Par absolut75 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 12/07/2006, 16h48

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