IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Aide applescript (clipboard)
Options
hannibal91
posté 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

Go to the top of the page
 
+Quote Post
PBell
posté 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
Go to the top of the page
 
+Quote Post
hannibal91
posté 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
Go to the top of the page
 
+Quote Post
PBell
posté 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
Go to the top of the page
 
+Quote Post
hannibal91
posté 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.
Go to the top of the page
 
+Quote Post
PBell
posté 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
Go to the top of the page
 
+Quote Post
baron
posté 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. smile.gif


--------------------
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…
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 16th April 2024 - 22:11