IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Comment puis-je convertir des caracters en un autre
Options
Pierrot10
posté 14 Jan 2016, 15:01
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 201
Inscrit : 19 Jan 2006
Lieu : Genève
Membre no 53 813



Bonjour à tous

J'arrive récupérer le nom de ma machine ainsi
Code
set user_computer to computer name of (system info)


Le problème que si se pose, c'est que certiane machine on un nom comme ceci:
Code
Pierrot's Macbook Air


J'aimerais donc convertir le contenu de user_computer, de manière à ce que les virgule, ponits, apostrophe et espace et tout autres carcatere n'étant entre a et z et de 0 à 9, soient convertis en _ ou en -

Comment pourrais-je faire ceci?

Milles mercis
Go to the top of the page
 
+Quote Post
Jaypee
posté 14 Jan 2016, 21:53
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Ce style de programmation est dit récursif, car la fonction chaine_valide fait appel à elle-même

- Elle utilise une chaine initialement vide dans laquelle elle accumule les bons caractères.
- Soit la source est épuisée, alors l'accumulateur contient le résultat, on a fini.
- Soit la source est composée d'un premier caractère et du reste

- Si le premier caractère est valide, on le place dans l'accumulateur
- Sinon on place le caractère de substitution dans l'accumulateur
et le résultat se calcule avec le reste et l'accumulateur.

Pour nettoyer un nom, on appelle chaine_valide avec le nom et un accumulateur vide.

Code
on car_valide(c)
    return (("a" ≤ c) and (c ≤ "z")) or (("0" ≤ c) and (c ≤ "9"))
end car_valide

on chaine_valide(src, accu)
    if (src is "") then
        return accu
    else
        set premier to first character of src
        if (car_valide(premier)) then
            set accu to accu & premier
        else
            set accu to accu & "_"
        end if
        if (length of src > 1) then
            set reste to text 2 thru -1 of src
        else
            set reste to ""
        end if
        return chaine_valide(reste, accu)
    end if
end chaine_valide

on nettoie_chaine(nom)
    return chaine_valide(nom, "")
end nettoie_chaine

set user_computer to nettoie_chaine(computer name of (system info))
user_computer


Ce message a été modifié par Jaypee - 14 Jan 2016, 22:15.
Go to the top of the page
 
+Quote Post
PBell
posté 17 Jan 2016, 16:22
Message #3


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Pourquoi ne pas utiliser les Applescript items text delimiters ?
Voir un exemple ci-dessous avec appel d'une routine qui remplace les caractères de la liste par "_" :

CODE
set mon_titre to "j'ai un texte, et je le transforme ! (c'est OK)"

set nouveau_titre to chaine_valide(mon_titre)
display dialog "resulat=" & nouveau_titre -- juste pour voir le résultat du test !

on chaine_valide(Lnom)
    set AppleScript's text item delimiters to {"#", "@", "&", "'", "(", "§", "!", ")", "*", "+", "/", ",", ";", " "}
    set Lliste to text items of Lnom
    set AppleScript's text item delimiters to {"_"}
    return Lliste as string
end chaine_valide


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
Jaypee
posté 17 Jan 2016, 18:37
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



C'est beaucoup plus compact, tout en évitant de réinventer la roue.
J'ai vu aussi d'autre solutions utilisant la commande tr du shell.

J-P
Go to the top of the page
 
+Quote Post
teddy7545
posté 17 Jan 2016, 21:22
Message #5


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 879
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Oui par exemple comme ça suivant l'idée de Jaypee adaptée en Applescript:
Code
set user_computer to computer name of (system info)
set user_computer to do shell script "echo \"" & user_computer & "\" | tr \"[., ']\" \"_\""

ou même
Code
set user_computer to do shell script "echo \"" & (computer name of (system info)) & "\" | tr \"[., ']\" \"_\""

Du coup c'est vraiment compact wink.gif

Je n'ai mis que 4 caractères à substituer . , ' et [espace]
mais rien n'empêche d'ajouter tous les caractères souhaités entre les accolades.
Dans cette application je pense toutefois que c'est n'est pas très utile.

Ce message a été modifié par teddy7545 - 17 Jan 2016, 23:54.


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
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 : 28th March 2024 - 21:23