Comment puis-je convertir des caracters en un autre |
Bienvenue invité ( Connexion | Inscription )
Comment puis-je convertir des caracters en un autre |
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 |
|
|
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. |
|
|
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 |
|
|
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 |
|
|
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 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 |
|
|
Nous sommes le : 28th March 2024 - 21:23 |