

[Résolu] "Rechercher remplacer" ou Grep ?
#1
Posté 04 August 2012 - 18:02 PM
voila, je voudrais savoir s'il est possible via la fonction "rechercher/remplacer" ou via un code Grep, de chercher un "espace+nombre+retour à la ligne" et de remplacer par "une suppression de retour à la ligne" ?
Je m'explique je travail sur une table de matière un peu particulière, et j'ai quelques lignes qui finissent par un espace et un nombre genre :
(ligne 1) : Titre A 1
Elles sont généralement suivies par une ligne identique, genre :
(ligne 2) : Titre B .....2 (où ..... est une tabulation)
Ce que je voudrais faire c'est les remplacer par :
(ligne 1) : Titre A Titre B ......2 (où ..... est une tabulation)
Donc supprimer l'espace, le premier nombre et le retour à la ligne.
Dans la fonction rechercher j'ai rentré ça :"^w^9^b". ça trouve bien ce que je veux, mais ça trouve aussi ce que je ne veux pas, c'est à dire mes lignes 2, celles qui comportent une tabulation entre l'espace et le nombre. Donc il faudrait dans mes recherches que je puisse exclure les tabulations.
Autre problème, par quoi je dois remplacer cette "formule" pour supprimer le retour de chariot dans mes résultats de recherches ? D'ailleurs, est-ce possible ?
Je précise que j'utilise Indesign CS3.
Merci beaucoup,
JC+
#2
Posté 05 August 2012 - 10:14 AM
Essaye cette regex
Rechercher : \d+\r(?=.+\t\d)
Remplacer par une espace.
#3
Posté 05 August 2012 - 10:38 AM
Je viens de tester ta regex. Alors elle trouve effectivement "espace+nombre+retour de chariot". Par contre elle me trouve aussi une ou 2 lignes où il y a des tabulations "espace+tabulation+nombre+retour de chariot", mais pas toutes.
En contrario, elle ne trouve pas certaines lignes constituées uniquement d'"espace+nombre+retour de chariot".

Le "remplacer par un espace" n'est pas génial, car je me retrouve alors avec un double espace.
En cherchant un peu, j'ai trouvé un forum où il y a ça d'écrit (par Laurent Tournier) :
Citation
^[[:cntrl:]]
Mais c'est quoi un "POSIX" ?
En tout cas, merci pour ta proposition,
JC+
PS : bien sur, je peux me servir de ta REGEX, et lorsqu'elle trouve ce que j'ai besoin, je peux appuyer sur "Suppr", mais je souhaiterai automatiser cela.
#4
Posté 05 August 2012 - 10:56 AM

Et ce que je voudrais avoir :

JC+
PS : Je précise que le nombre est généré automatiquement par la table de matière... ça peut avoir son importance

#5
Posté 05 August 2012 - 11:15 AM
Les données du problème étaient alors très incomplètes ! Pour essayer de sortir une regex fonctionnant partout, il faut un bout de texte réel comme il l'est dans ton document et comportant tous les cas de figure. et surtout bien décrire ce que tu cherches à faire.
Et peut-être sera-ce impossible !
Pour le style de paragraphe, c'est bien normal puisque du coup la deuxième ligne vient faire partie du premier paragraphe et prendra donc inévitablement son style que tu peux personnaliser avec des styles grep ou styles imbriqués.
Je pourrais voir avec ce que tu indiques ci-dessus mais je n'ai pas de TDM sous la main.
Pourquoi a-t-on parfois des crochets et parfois pas ??? Ça semble très désordonné.
JC+ dit :
PS. Je te conseille le livre de Laurent Tournier : Grep et inDesign CS3/CS4 (valable pour CS5 et CS6 également) aux éditions Dunod.
#6
Posté 05 August 2012 - 11:24 AM
Je vais essayer de reprendre plus simplement, et avancer pas à pas.
J'ai besoin de lancer une recherche dans un article. Cette rechercher devrait trouver la chaine "espace+nombre+retour de chariot", dans cet ordre là. Mais cette recherche ne devrait pas trouver la chaine "espace+tabulation+nombre+retour de chariot". Toute la différence entre "je trouve" ou "je ne trouve pas", réside dans la présence ou non de la tabulation.
Si déjà, je pouvais trouver comment effectuer cette recherche, je verrais alors par la suite pour le "remplacer par".
Merci pour ton aide.
J'ai feuilleté le livre de L. Tournier sur le google, mais j'ai peur qu'il soit un peu trop compliqué pour un néophyte comme moi

JC+
#7
Posté 05 August 2012 - 13:08 PM
Lorem lorem : 8¶
ipsum ipsum¶
ipsum ipsum.....................8
Dans ce cas par exemple, tu a aussi un retour chariot à supprimer mais tu n'as pas de chiffre pour te baser.
Je pense qu'un un seul Rechercher / remplacer, ce n'est pas possible.
La solution c'est de rassembler plusieurs rechercher / remplacer dans un javascript afin de ne faire qu'une manipulation.
Je ne sais pas de tête comment ça traitera une TDM mais teste ce javascript sur une copie du document pour ne pas faire de bêtise.
Tu dézippe le fichier, tu le places dans le répertoire des scripts d'inDesign (celui du logiciel ou de l'utilisateur*)
*Répertoire d'installation :
/Users/nom d'utilisateur/Library/Preferences/Adobe InDesign/Version 7.0/fr_FR/Scripts/Scripts Panel
OU
/Applications/Adobe InDesign CS5/Scripts/Scripts Panel/Samples/JavaScript
Tu retrouveras ensuite le script dans le panneau des scripts.
Un double clic sur le script le lancera. Fais toutefois attention, il s'applique sur tout le document.
Je vais faire une demande afin de savoir comment limiter le script à une sélection.
Fichier(s) joint(s)
#8
Posté 05 August 2012 - 13:45 PM
Eddy.vh, le 05 August 2012 - 13:08 PM, dit :
Lorem lorem : 8¶
ipsum ipsum¶
ipsum ipsum.....................8
Dans ce cas par exemple, tu a aussi un retour chariot à supprimer mais tu n'as pas de chiffre pour te baser.

Eddy.vh, le 05 August 2012 - 13:08 PM, dit :

Eddy.vh, le 05 August 2012 - 13:08 PM, dit :

JC+
#9
Posté 05 August 2012 - 14:25 PM
Je ne sais pas si c'est possible, mais à la fin de celui-ci, il faudrait qu'il puisse passer en italique tous les textes entre des crochets [ ], crochets inclus, et idem pour des texte entre ":" et "tabulation" (":" et "tabulation" non inclus).
Enfin, si ce script pouvait ne pas s'appliquer aux textes entre un "-" et une "tabulation"... Et bien là ça serait le bonheur !!!
En tout cas, merci pour ton aide, c'est la deuxième fois que tu me sors un script du tonnerre !

#10
Posté 05 August 2012 - 17:01 PM
Pour la mise en italique des textes entre crochets, un styles grep fera l'affaire.
Crées un style de caractères "italique" et formate ces caractères avec une fonte de ton choix en italique.
Ouvre ton style de paragraphe dédié à ta TDM, dans l'onglet styles grep, ajoute un, nouveau style :
Indique le style de caractères à appliquer et applique le au texte : \[.+\]

Pour ne pas s'appliquer au textes entre : et tab, montre-moi un exemple de ce texte afin de ne pas rechercher vainement !
#11
Posté 05 August 2012 - 17:52 PM
Lorem Lorem [ipsum ipsum] ....................1
Lorem Lorem ...........................................2
Lorem Lorem : ipsum ipsum ....................3
Lorem Lorem : - 4
- ipsum ipsum ..................5
- ipsum ipsum ..................6
Pour ne pas s'appliquer au texte entre : et tab -> ça correspond aux ipsum ipsum de la ligne 3
Pour ne pas s'appliquer au texte entre - et tab -> ça correspond aux ipsum ipsum des lignes 5 et 6
JC+
#12
Posté 05 August 2012 - 17:59 PM
Eddy.vh, le 05 August 2012 - 17:01 PM, dit :
Indique le style de caractères à appliquer et applique le au texte : \[.+\]
Donc pour la ligne 3 (entre : et tab), j'ai essayé \:.+\t : en remplaçant avec le style de caractère "italique" que j'ai créé... Mais ce code m'inclus la tab, et donc me la passe en italique, ce que je ne veux pas. Comment l'exclure de la recherche Grep ?
JC+
#13
Posté 05 August 2012 - 19:29 PM
Pour finir, un rechercher / remplacer mentionné plus haut pour italiser uniquement les textes entre crochets :
rechercher : \[.+\]|(?<=:\s)(\w+ ?)+
remplacer par : rien
remplacer le format : italique

PS : Script pas encore modifier pour ne s'appliquer qu'à une sélection, j'ai envoyé une demande d'aide, elle est encore en cours…
Fichier(s) joint(s)
#14
Posté 05 August 2012 - 19:52 PM
Question : le code \:.+\t est censé rechercher toute la chaine commençant par ":", puis tous les caractères jusqu'à une tab (tab incluse).
Comment le modifier pour exclure la tab, c'est à dire, rechercher une chaine depuis ":" y compris tous les caractères derrières jusqu'à une tab, mais sans la tab.
mÔnsieur Eddy.vh... Merci beaucoup

#15
Posté 05 August 2012 - 19:59 PM
Aussi, :.+\t retrouve la chaine de caractère les : et tab inclus !!! (Tu ne dois pas échapper le double point)
#16
Posté 05 August 2012 - 20:04 PM
JC+, le 05 August 2012 - 19:52 PM, dit :
Comment le modifier pour exclure la tab, c'est à dire, rechercher une chaine depuis ":" y compris tous les caractères derrières jusqu'à une tab, mais sans la tab.
J'ai trouvé grâce à Yorigami : http://forums.mediab...gnes-distincts/
Le code : (?<=: )([^:\t])+(?=\t ) (attention : sans espace entre : et ), sinon ça me fait un smiley sur le site)
Je commence à comprendre le Grep... Vais pouvoir commander le livre de Laurent

JC+
#17
Posté 05 August 2012 - 20:12 PM
JC+ dit :
Bonsoir. Je quitte pour aujourd'hui.
#18
Posté 05 August 2012 - 20:17 PM
Eddy.vh, le 05 August 2012 - 19:59 PM, dit :
Eddy.vh, le 05 August 2012 - 19:59 PM, dit :

Si je traduis en français ton code : \[.+\]|(?<=:\s)(\w+ ?)+
Rechercher tous ce qui se trouve entre crochets, et tous les caractères après deux points suivi d'espace (en les excluants), mais je n'arrive pas à "traduire" (+ ?)+ .... Petit coup de pouce ?
Désolé d'être insistant, mais je préfère comprendre à recopier.
JC+
#19
Posté 05 August 2012 - 21:50 PM
Citation
Mais il y a une astuce pour contourner sous CS3…
http://www.indigrep....-C-est-possible
Et le fameux FindChangeByList qui permet d'enchainer des rechercher-remplacer GREP et/ou Texte.
http://abracadabrapd...p?lng=fr&pg=450
#20
Posté 05 August 2012 - 22:42 PM
JC+, le 05 August 2012 - 20:17 PM, dit :

Le backslash sert à échapper un caractère afin qu'il ne soit pas considéré comme métacaractère. p.ex. une parenthèse devra être échappée par un backslash afin de ne pas être prise comme métacaractère (parenthèse de sous expression). Mais il y a encore quelques conditions que tu apprendras en lisant le lire de Laurent.
JC+ dit :
Rechercher tous ce qui se trouve entre crochets, et tous les caractères après deux points suivi d'espace (en les excluant), mais je n'arrive pas à "traduire" (+ ?)+ .... Petit coup de pouce ?
on recherche tous caractères quelconque entre crochets répétés une ou plusieurs fois, ces derniers compris
OU (et non ET)
tous caractères de mots une ou plusieurs fois suivi(s) d'une espace éventuelle, une ou plusieurs fois à la condition unique d'être précédés par un double point suivi d'une espace quelconque.
+ signifie une ou plusieurs fois
? signifie zéro ou une fois (éventualité)
JC+ dit :
JC+
@ Mandrake :
Oui, j'ai failli mettre ce lien mais je ne manipule moi-même pas très bien ce script (je vais cependant l'étudier), il m'aurait dès lors été difficile de continuer à conseiller JC+ !
#21
#22
Posté 06 August 2012 - 17:27 PM
1er GREP : Je recherche tous les chiffres entre un espace et un retour de chariots (\s\d+\r) dans le style de paragraphe 1 que je remplace par un espace, et je sauvegarde cette recherche
2ème GREP : Je recherche tous les caractères entre crochets, crochets inclus ( \[.+\]) que je remplace par rien, et que je remplace par un format en style de caractère italique, et je sauvegarde cette deuxième recherche
3ème GREP : Je recherche tous les caractères précédés de : et d'un espace et suivi d'une tab ((?<=:\s).+?(?=\t)) que je remplace par rien, et que je remplace par un format en style de caractère italique, et je sauvegarde cette troisième recherche
4ème GREP : Je recherche tous les retours de chariots précédés d'une lettre quelconque ((?<=[\l\u])\r) que je remplace par un espace, et je sauvegarde cette quatrième recherche
5ème GREP (qui est en fait la 3ème GREP répétée) : Je recherche tous les caractères précédés de : et d'un espace et suivi d'une tab ((?<=:\s).+?(?=\t)) que je remplace par rien, et que je remplace par un format en style de caractère italique, et je sauvegarde cette cinquième recherche
Et j'obtiens bien le résultat voulu en faisant tout ça manuellement.
Donc, je me dis que si j'applique ça dans le JavaScript Chain_queries, tout devrait se faire en une fois en le lançant.
Bon, pour être honnête, je n'ai qu'un seul bug dans toutes ces démarches.
En effet, lorsque j'applique mon GREP n°1, il s'applique aussi à ma ligne :
Lorem Lorem ...........................................2
C'est à dire qu'il ne voit pas la tab entre l'espace et le nombre

Donc, si j'arrivais à faire appliquer la GREP uniquement aux lignes sans tab, ça serait le paradis

Si vous avez une idée...
Autre question : Le Javascript Chain_queries va s'appliquer à tout mon document ou uniquement à l'article ?
(étant donné que mes recherches sauvegardées sont paramétrée pour "article", je serai tenté de dire uniquement à l'article). J'ai bon ?
JC+
#23
Posté 06 August 2012 - 17:46 PM
JC+, le 06 August 2012 - 17:27 PM, dit :

Lorem Lorem 1
J'applique un caractère spécial genre "+". J'aurais alors :
Lorem Lorem+1
Et donc je remplace mon GREP 1 par : \+\d+\r
Comme ça je préserve mes lignes de type :
Lorem Lorem .........1
Qu'en pensez-vous ?
JC+
PS : En m'auto-répondant, j'espère ne pas trop polluer le topic

#24
Posté 06 August 2012 - 18:51 PM
#25
Posté 06 August 2012 - 19:02 PM
Eddy.vh, le 06 August 2012 - 18:51 PM, dit :
De plus, il ne résout pas l'équivalent des "lignes 11" dans mon exemple, et après l'avoir lancé, il faut qu'en même appliquer des rechercher/remplacer pour mettre en forme (c'est à dire en italique) certains passages.
Je ne remets absolument pas en cause ton travail et toute l'aide que tu m'as apportée, bien au contraire !!!!
J'essaye juste de mettre en application ce que tu m'as expliqué pour essayer de m'en sortir tout seul avec une solution peut-être alternative.
JC+
#26
Posté 06 August 2012 - 19:02 PM
Merci
JC+
#27
Posté 06 August 2012 - 19:45 PM
/Users/nom d'utilisateur/Library/Preferences/Adobe InDesign/Version 7.0/fr_FR/Find-Change Queries
ou l'équivalent sous Windows. et y supprimer tes enregistrement.
Voici le script (merci Laurent pour les infos) ne s'appliquant qu'à la sélection.
Aussi Laurent m'a conseillé le FindChangeByList pour ce genre de choses.
Fichier(s) joint(s)
#28
Posté 06 August 2012 - 20:11 PM
Eddy.vh, le 06 August 2012 - 19:45 PM, dit :
/Users/nom d'utilisateur/Library/Preferences/Adobe InDesign/Version 7.0/fr_FR/Find-Change Queries
ou l'équivalent sous Windows. et y supprimer tes enregistrement.
Eddy.vh, le 06 August 2012 - 19:45 PM, dit :
Aussi Laurent m'a conseillé le FindChangeByList pour ce genre de choses.
JC+
#29
Posté 06 August 2012 - 20:18 PM
Je n'utilise pas ces scripts findChange…, et le reste car je n'en ai pas l'utilité, je vais me pencher sur ces derniers mais pas tout de suite, j'ai d'autres choses à terminer avant.
#30
Posté 06 August 2012 - 20:30 PM
JC+
#31
Posté 06 August 2012 - 20:41 PM
Pour le formatage de la ligne 11, je te laisse chercher un peu…

#32
Posté 06 August 2012 - 21:20 PM
Très intéressant cas évoqué ici. Je réponds simplement à Eddy pour l'exemple ci-dessous:
Citation
ipsum ipsum¶
ipsum ipsum.....................8
Il est possible de sélectionner l'ensemble avec la regex suivante:
([^\d]+)(\d)\r([^\r]+)\r([^\d]+)(\2)
Un peu d'explication. L'astuce est de rappeler le numéro de page avec une référence arrière (ici \2).
La première ligne est sélectionnée avec ([^\d]+)(\d)\r = tous ce qui n'est pas un chiffre une ou plusieurs fois suivi d'un chiffre quelconque suivi d'une marque de fin de paragraphe.
La deuxième ligne = tout ce qui n'est pas une marque de fin de paragraphe une ou plusieurs fois suivi d'une marque de fin de paragraphe.
Troisième ligne = même chose que la première mais suivi par une référence arrière qui rappelle la sous-expression numéro 2 de la regex (en d'autres termes le même numéro de page).
Je remplace le tout par des "Trouvé" : $1$3 $4$5 (j'ignore le $2 qui correspond au premier numéro de page)
#33
Posté 07 August 2012 - 09:04 AM
Merci pour cette information, je ne maitrise pas encore bien les références arrière !
#34
Posté 11 August 2012 - 14:44 PM
Est-ce que je peux appliquer ton script manuellement, ligne par ligne, pour comprendre comment il fonctionne, ou bien est-ce impossible de le décomposer ?
Je te demande cela, car lorsque je fais cette recherche : (?<!-) \\d ? (ligne 11 de ton script), j'ai un message qui me dit qu'il n'a rien trouvé dans mon article

Merci,
JC+
#36
Posté 11 August 2012 - 15:01 PM
JC+, le 11 August 2012 - 14:44 PM, dit :
Est-ce que je peux appliquer ton script manuellement, ligne par ligne, pour comprendre comment il fonctionne, ou bien est-ce impossible de le décomposer ?
Je te demande cela, car lorsque je fais cette recherche : (?<!-) \\d ? (ligne 11 de ton script), j'ai un message qui me dit qu'il n'a rien trouvé dans mon article

Merci,
JC+
JC+, le 11 August 2012 - 14:56 PM, dit :
Je vais chercher voir si on peut supprimer cet historique.
#38
Posté 11 August 2012 - 16:15 PM
j'ai créé 6 "rechercher/remplacer" (dans le style de ce que je propose plus haut dans le topic) que j'ai sauvegardé en les nommant TDM1, TDM2, etc...
Puis j'ai pensé à reprendre un script que tu m'avais déjà proposé, et que j'ai modifié de la façon suivante :
app.loadFindChangeQuery ("TDM1", SearchModes.grepSearch);
app.activeDocument.changeGrep();
app.loadFindChangeQuery ("TDM2", SearchModes.grepSearch);
app.activeDocument.changeGrep();
app.loadFindChangeQuery ("TDM3", SearchModes.grepSearch);
app.activeDocument.changeGrep();
app.loadFindChangeQuery ("TDM4", SearchModes.grepSearch);
app.activeDocument.changeGrep();
app.loadFindChangeQuery ("TDM5", SearchModes.grepSearch);
app.activeDocument.changeGrep();
app.loadFindChangeQuery ("TDM6", SearchModes.grepSearch);
app.activeDocument.changeGrep();
ça marche super bien, et en plus, ça me permet de mettre automatiquement en forme mon texte lorsque je lance le script !!!
Merci donc à tous, et surtout à Eddy

JC+
PS : Eddy, si tu trouves comment supprimer l'historique défini ci-dessus, ça m'intéresse

#39
Posté 12 August 2012 - 11:14 AM
Finalement en supprimant le fichier des paramètres (réinitialisation de ID), l'historique disparait, c'est normal.
J'ai par contre vérifié le contenu de ces fichiers avant leur suppression et n'y ai rien trouvé ressemblant à cet historique.
Si je trouve, je ne manquerai pas de t'informer.
1 utilisateur(s) li(sen)t ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)