Copy link to clipboard
Copied
Hello
I try to cut in two an object text to make two separate object?
The object contains "36-25", I try to extract the numbers in two text object for modified separately
I have dumal with the manipulations
Thank you
/************************
Bonjour
je cherche à couper en deux un object text pour en faire deux object séparé ?
l'objet contient "36-25", je cherche à extraire les chiffres dans deux object texte pour les modifié séparément
j'ai dumal avec les manipulations
Merci
Copy link to clipboard
Copied
Salut,
Tu veux quoi au final ? un bloc texte avec "25", un autre avec "36" ?
(^/)
Copy link to clipboard
Copied
Bonjour Obi-wan,
Le "25-36" est le résultat d'un ".findGrep()" qui me donne une [object Text], mais je dois mettre une référence croisé sur le 25 et 36.
var xRefForm = app.activeDocument.crossReferenceFormats.item("N Para"); // Format de la referenvce
var source = app.activeDocument.crossReferenceSources.add ([object Text], xRefForm);
mais je dois faire un traitement sans perdre la sélection dans mon texte (si je ne me trompe pas)
J'ai testé la chose suivante, qui me donne bien un [object Text] mais comme les chiffres peux être \d-\d, \d-\d\d ou même \d\d-\d\d\d, ce n'est pas le bonne solution.
var startCh = test02.characters[0];
var endCh = test02.characters[1];
var test3 = test02.characters.itemByRange(0,1);
Merci
Copy link to clipboard
Copied
Plus clair ! …
Tu sembles donc vouloir trouver "25" et "36" séparément ?
(^/)
Copy link to clipboard
Copied
Oui ...
J'utilise le grep suivant
var leRecherchePara = '\\b(infra|supra)\\b,\\snos?~S?\\K(\\d+)\\s?(et|-|,)?[~S|\\s]?(\\d+|s\\.)?';
qui peux me donner
\d+
\d+-\d+
\d+ et s.
pour le chiffre seul pas trop de problème à mon avis, pour le "25 et s." là, non plus je ne devrais pas avoir trop de problème.
mais je ne parviens pas à décomposé l'objet en deux objet.
Si non, je pence à mettre un style de caractère sur les chiffre et puis retiré tous ce qui n'est pas un numéro
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
with (app.findGrepPreferences){
findWhat = "[^0-9]";
//appliedCharacterStyle = 'TDM Folio'; // Pour test 'Rouge'
appliedCharacterStyle = 'xxxx';//
} // fin
with (app.changeGrepPreferences){
appliedCharacterStyle = '[No character style]';
} // fin
app.activeDocument.changeGrep();;
Mais c'est pas très pro ! non?
Merci
😉
Copy link to clipboard
Copied
Peux-tu me donner quelques lignes de texte d'exemple ?
Commentaire: D'après ton code Grep, tu recherches par ex. :
"blablabla, infra, nos 25-26." ou "blablabla, infra, nos 25, 26 et 27."
Si tu veux attraper "25", puis "26" (puis – 2e ex. – "27"), tu pourrais avoir besoin de "\G"!
(^/)
Copy link to clipboard
Copied
Voici "Cf. infra, nos 5-6."
Copy link to clipboard
Copied
Je travail beaucoup par étape (et beaucoup de test) voici le code de cette étape :
#target "indesign-12.064"
/***********************************
// variable globale
*************************************/
var leRecherchePara = '\\b(infra|supra)\\b,\\snos?~S?\\K(\\d+)\\s?(et|-|,)?[~S|\\s]?(\\d+|s\\.)?';
// fais dans le CC2017 dois être compatible avec le CC2017
main()
function main() {
// problème quand du deux chiffre avec style de caractaire ???
// problème dans certin cas les chiffres ne change pas????
if (app.documents.length > 0){ // IF 01
laRecheche (app.activeDocument);
} else {
alert("Ouvrir un document et selectioné votre text.");
} // fin du IF 01
}//
// Fin du main
function laRecheche(leDocSource) {
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
with (app.findGrepPreferences){
findWhat = leRecherchePara; // la commande de la recheche
} // fin
var lesSupraInfra = leDocSource.findGrep();
for (var i = 0 ; i < lesSupraInfra.length; i++ ) {
maTransformation2(lesSupraInfra);
}
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
}//
function maTransformation2(laRecheche) {
var rech2 = /[^\d]/g;
//var trouve = laRecheche.replace(rech, '6');
//-> laRecheche.characters[0].contents = '6' // travaille toujour sur la recherche la mdification saplique dans Id
//$.writeln(laRecheche.contents);
// var trouvé = laRecheche.contents.match(rech2);
//$.writeln(trouvé);
if (laRecheche.contents.match(rech2) != null) {
var rech = /(\d+)/g;
var test02 = laRecheche;
// test02.insertionPoints.item(0).contents = '9'
// var test3 = test02.characters.itemByRange(startCh,endCh);
try {
var startCh = test02.characters.item(0);
var endCh = test02.characters.item(3);
var test3 = test02.characters.itemByRange(startCh,endCh);
$.writeln( test3.contents);
}
catch(e) {
$.writeln( 'Null : ' + e);
}
}
}//
//
function maTransformation(laRecheche) {
var rech = /(\d+)/g;
var rech2 = /[^\d]/g;
//var trouve = laRecheche.replace(rech, '6');
//-> laRecheche.characters[0].contents = '6' // travaille toujour sur la recherche la mdification saplique dans Id
$.writeln(laRecheche.contents);
// var trouvé = laRecheche.contents.match(rech2);
//$.writeln(trouvé);
if (laRecheche.contents.match(rech2) != null) {
var test01 = laRecheche.toSource ();
var test02 = laRecheche;
// test02.insertionPoints.item(0).contents = '9'
var startCh = test02.characters[0];
var endCh = test02.characters[1];
$.writeln( endCh.contents);
// var test3 = test02.characters.itemByRange(startCh,endCh);
var test3 = test02.characters.itemByRange(0,1);
$.writeln( test3.contents);
}
}//
Copy link to clipboard
Copied
J'ai réécrit ton code Grep! Le mien trouve tous les chiffres dans ton contexte de footnotes.
À valider (écrit rapidement) :
(Cf.~S(infra|supra), nos?~S|\G)(-?|, | et )\K\d+
Mais il ne trouvera pas le "2" et 2017" dans :
Cf. infra, nos 25, 36 et 38. 2 articles en 2017.
(^/)
Copy link to clipboard
Copied
Merci je teste, qu'elle est la signification de "\G" en français
j'ai lu "\G (start of match attempt)" -> "\ G (début de la tentative de match)" ???
Copy link to clipboard
Copied
Pour être clair : Personne n'utilise "\G" parce que personne n'y comprend rien !
Pour essayer de simplifier, le code recherche un nombre "\d+" dans un certain contexte "…\K".
Ce contexte originel est d'abord : "(Cf.~S(infra|supra), nos?~S)\K"
S'il en trouve un, il recherche le suivant grâce à "\G" mais là il introduit ces 2 nouveaux arguments que : "(Cf.~S(infra|supra), nos?~S)" n'a pas besoin d'exister (il le peut !) et le 2e catch sera, juste après le premier, complêté par : "(-?|, | et )" et ainsi de suite … Tant qu'il trouve cet environnement, il "catches" ! mais toujours avec cette arrière-pensée que le contexte originel peut réapparaître ! …
[ Bref, tout à fait limpide ! N'est-ce pas !?… Je suis un très mauvais prof. ! Désolé ! ]
(^/)
Copy link to clipboard
Copied
Merci pour cette explication ... à méditer et a pratiquer !!!
Je vous tiens au courant de l’avancement du script .
Merci
Copy link to clipboard
Copied
Après quelque test de réglage ... Oups! la ligne du grep trouve le tous première chiffre 4 qui est le tous premier caractère ...
Copy link to clipboard
Copied
Est-ce à dire que tu ne cibles pas seulement les footnotes ?
Est-ce à dire que tu n'utilises pas ici de num auto?
Tu peux toujours exclure ce genre de situation en "exigeant" un caractère après :
(Cf.~S(infra|supra), nos?~S|\G)(-?|, | et )\K\d+(?=.)
Cela t'évitera ce cas de figure et la problématique des "tableaux à chiffres".
Ne voyant pas ton fichier, ce n'est pas évident d'inventorier toutes les exclusions!
(^/)
Copy link to clipboard
Copied
Oui, je cherche sur tous le document, ce numéro n'est pas automatique, c'est dure de voir tous les cas.
'J'ai placer un 5 dans la mise en page comme tu peux voir sur l'image, il ne le trouve pas la, ça me semble logique.
Dans le grep on a place "nos?" pour le \K, c'est le \G qui le fais passer ? Et pour quoi le 4 et pas le 5?
Sans ficher c'est compliqué, on n'est jamais asse prédit, je suis tous les jours dans le job.
un très grand merci pour toutes ces infos.