Aide applescript (clipboard) |
Bienvenue invité ( Connexion | Inscription )
Aide applescript (clipboard) |
14 Jan 2017, 16:15
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 14 Jan 2017 Membre no 200 864 |
Bonjour à tous,
j’ai du mal à écrire un script pour réaliser la transformation suivante : a partir d’une liste de mots-clefs se présentant sous la forme suivante phénomènes inexpliqués 681 animal 343 Sherlock Holmes 72 aventure 215 trésor 113 énigme 46 cambrioleur 40 Arsène Lupin 19 je désire obtenir : phénomènes inexpliqués, animal, Sherlock Holmes, aventure, trésor, énigme, cambrioleur, Arsène Lupin, chaque ligne de la liste initiale est copiée puis collée dans un autre document après transformation. Le script suivant fonctionne avec une liste initiale ou les mots-clés sont séparés comme ci-dessous par 3 espaces classique thriller suspense roman policier belge policier français romans policiers et polars enfance commissaire maigret enquêtes meurtre crime est-il possible de le modifier pour obtenir le résultat escompté ? Merci aux experts Applescript. CODE get the clipboard set the clipboard to (replacement of " " by " ," for the result) on replacement of oldDelim by newDelim for sourceString set oldTIDs to text item delimiters of AppleScript set text item delimiters of AppleScript to oldDelim set strtoks to text items of sourceString set text item delimiters of AppleScript to newDelim set joinedString to strtoks as string set text item delimiters of AppleScript to oldTIDs joinedString end replacement tell application "System Events" keystroke "v" using {command down} end tell |
|
|
15 Jan 2017, 12:23
Message
#2
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Si je comprends bien ta demande, il s'agit de détecter la présence de nombres et de remplacer chacun de ces nombres par une virgule suivie d'un espace. Ces nombres sont-ils toujours des entiers ? ou peuvent ils être des nombres décimaux (donc avec une virgule) ? Se peut-il que 2 nombres se suivent, sans mot entre les deux ? Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
15 Jan 2017, 12:37
Message
#3
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 14 Jan 2017 Membre no 200 864 |
Bonjour PBell
Il s'agit bien de remplacer les nombres par une virgule suivie ou non d'un espace (c'est plus lisible avec) Nombres : uniquement des entiers de 1 à 99999.... donc pas de virgule Texte : Il y a toujours un ou plus d'un mot entre les nombres. J'ai fait quelques essais avec des expressions régulières mais je patauge. Merci de ton aide |
|
|
15 Jan 2017, 13:31
Message
#4
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Le script ci-dessous réponds à ta demande.
J'ai mis beaucoup de commentaires afin que tu puisses en suivre le déroulement et la logique. CODE set LeText to get the clipboard set LesMots to every word of LeText -- transforme en une suite de mots set AppleScript's text item delimiters to {" "} repeat with I from 1 to count of LesMots -- boucle sur chacun des mots set Nb to 0 try set Nb to item I of LesMots as integer -- essaie de convertir le mot en nombre on error set Nb to 0 -- en cas d'erreur, ce n'est pas un nombre ! end try if Nb > 0 then -- le mot est un nombre if I = (count of LesMots) then -- ce mot est le dernier donc on ne met rien set item I of LesMots to "" else set item I of LesMots to ", " -- ce mot n'est pas le dermier, on mets une virgule et un espace end if end if end repeat set LeText to LesMots as text -- reconversion des mots en une chaîne de texte set the clipboard to LeText Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
15 Jan 2017, 15:02
Message
#5
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 14 Jan 2017 Membre no 200 864 |
Mille fois merci PBell,
Je n’aurais jamais pensé à cette solution ! J’ai du mal a comprendre la seconde ligne set LesMots to every word of LeText -- transforme en une suite de mots pourquoi cette transformation est indispensable ? le comptage des mots ? le test de conversion en nombre ? … ? Merci encore. |
|
|
15 Jan 2017, 19:55
Message
#6
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonsoir,
Effectivement, le script, en ligne 2 transforme un texte en une liste de mots. Effectivement Applescript excelle dans la manipulation de liste: comptage, changement d'un élément de la liste, itération sur l'élément I de la liste,... Le script peut alors compter le nombre d'éléments de cette liste pour boucler de l'élément 1 au dernier. C'est un façon simple de se promener dans un texte. Note aussi que Applescript autorise à transformer un texte en liste de mots (comme ici), en liste de paragraphes, en liste de lettres, et même en liste de groupe de texte séparé par des Applescript's text item. Ici je n'utilise que la séparation en mots. Pour chaque élément de cette liste (donc pour chaque mot du texte !), il cherche à le convertir en nombre. Si le script donne une erreur, c'est que ce n'est pas un nombre, donc on ne fait rien (c'est bien un mot et pas un entier). Si par contre le script a converti l'élément (le mot !) en nombre, je remplace nombre. Ici, j'ai ajouté une subtilité: si le nombre est le dernier élément du texte, je le remplace par rien, sinon, je le remplace par ", ". Est-ce plus clair ? Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
15 Jan 2017, 21:21
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 343 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
Félicitations !
C'est super clair. -------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
Nous sommes le : 18th April 2024 - 12:35 |