# Séparer chiffres et lettres par un espace



## jaiglisséchef (23 Mai 2019)

Bonjour à tous, 

je voudrais créer un applescript qui me permettrait de séparer les lettres des chiffres avec un espace et idéalement qu'il ne tienne pas compte d'autre chose que des lettres et des chiffres (exit les caractères spéciaux).

Exemple : abcde12d*-&efsz59  -> abcde 12 defsz 59

Une âme charitable pourrait elle se pencher sur mon problème car j'avoue que je suis nul en applescript.

Par avance un grand Merci


----------



## zeltron54 (23 Mai 2019)

Bonjour,

C'est pour un texte qui est actuellement où ? Dans un fichier Texte, txt,  rtf,   docx,   ...... Créé avec quel logiciel ?

Une solution sans applescript est de faire dans le logiciel un : rechercher/remplacer des chiffres.   Style recherche  "1" remplace par " 1 ".


----------



## jaiglisséchef (23 Mai 2019)

zeltron54 a dit:


> Bonjour,
> 
> C'est pour un texte qui est actuellement où ? Dans un fichier Texte, txt,  rtf,   docx,   ...... Créé avec quel logiciel ?
> 
> Une solution sans applescript est de faire dans le logiciel un : recherche/remplacer des chiffres.   Style recherche  "1" remplace par " 1 ".




Le texte vient du presse papier, je copie une référence mais j'ai besoin de séparer les chiffres et les lettres avant de l'intégrer dans mon logiciel


----------



## zeltron54 (23 Mai 2019)

Dans ce cas, il te faudrait faire un collé dans un fichier texte, lancer le script, puis faire un copier et le coller dans ton logiciel, Cela fait beaucoup de manipulations et ne sera donc intéressant seulement si le texte est très long...


----------



## jaiglisséchef (23 Mai 2019)

zeltron54 a dit:


> Dans ce cas, il te faudrait faire un collé dans un fichier texte, lancer le script, puis faire un copier et le coller dans ton logiciel, Cela fait beaucoup de manipulations et ne sera donc intéressant seulement si le texte est très long...



Merci pour ta réponse mais c'est pas trop ce que je recherche, j'ai pas envie d'une usine à gaz. je vais continuer de chercher. Merci quand même.


----------



## zeltron54 (23 Mai 2019)

Tu voudrais quoi , idéalement, ?
Qu'on regarde ce qui est faisable...


----------



## jaiglisséchef (23 Mai 2019)

idéalement : je sélectionne ma ref, action bouton souris CMD+C (j'ai une souris Logitech G600 avec 2 ou 3 fonctions pour mon boulot) lancement applescript avec ajout d'un espace entre les chiffres et les lettres et je fais un CMD+V avec le résultat. Ca me ferait gagner beaucoup de temps.


----------



## zeltron54 (23 Mai 2019)

Ok ! je regarde pour faire un script qui agit dans le presse papier...


----------



## jaiglisséchef (23 Mai 2019)

zeltron54 a dit:


> Ok ! je regarde pour faire un script qui agit dans le presse papier...



Super, c'est sympa.


----------



## zeltron54 (23 Mai 2019)

Voilà un script qui devrait faire ce que tu veux.
Après avoir fait un copier de ta ref dans le presse papier, ton lance le script, puis tu colles, il devrait y avoir espace qui encadre chaque nombre.
Attention ! il ne contrôle pas si un espace existe déjà  donc si un espace existe , il y en aura 2, et si tu lances plusieurs fois le script, il y aura autant d'espaces ajoutés.


```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
  
    repeat with i from 2 to leNbchar - 1
        set place to place + 1
        set lechar1 to character i of laref
        set lechar2 to character (i + 1) of laref
        set lechar0 to character (i - 1) of laref
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                set place to (place + 1)
            end if
            if lechar2 is not in lesChar then
                set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                set place to (place + 1)
            end if
        end if
    end repeat
    set the clipboard to newref
end tell
```

Allez une deuxième version qui ne rajoute pas d'espace s'il existe.


```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
   
    repeat with i from 2 to leNbchar - 1
        set place to place + 1
        set lechar1 to character i of laref
        set lechar2 to character (i + 1) of laref
        set lechar0 to character (i - 1) of laref
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                if lechar0 = " " then
                else
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
            if lechar2 is not in lesChar then
                if lechar2 = " " then
                else
                    set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
        end if
    end repeat
    set the clipboard to newref
end tell
```


----------



## jaiglisséchef (23 Mai 2019)

Super !!!!! Tu es mon héro du jour. Merci beaucoup, ça fonctionne parfaitement avec un bouton de ma souris. J'ai juste essayé de rajouter : 

tell application "System Events" to keystroke "v" using {command down} 

pour un CMD+V à la fin de ton script mais malgré l'autorisation dans sécurité et confidentialité, il me met un message "...n’est pas autorisé à envoyer de saisies. (1002)". Ca serait la cerise sur le gâteau car je vais déja gagner beaucoup de temps


----------



## zeltron54 (23 Mai 2019)

Je n'ai pas compris ce que tu veux faire avec ton CMD+V .
Explique clairement ce que tu veux obtenir.


----------



## jaiglisséchef (23 Mai 2019)

désolé  à la fin de l’exécution du script je voudrais qu'il puisse coller le nouveau contenu du presse papier.

1) je copie ma ref dans le presse papier  xxxxx555
2) je mets mon curseur dans la cellule et j'appuie sur le bouton de ma souris et il colle lui même le résultat du script

Par contre, est-ce que c'est faisable si une référence possède un caractère spécial (-*/!%) de le remplacer par un " "

genre 122ggg-22 -> 111 ggg 22

j'en demande beaucoup je sais


----------



## zeltron54 (23 Mai 2019)

Alors, dans l'ordre.
1 - coller le résultat dans la cellule !   Ce n'est pas le finder, mais ton application qui gère le collé. Donc il s'agit de la cellule de quelle application (à voir si elle est scriptable).

2 - remplacer un caractère par un autre pourquoi pas. Il faut la liste complète des caractères devant être remplacés. et par quoi ?


----------



## jaiglisséchef (23 Mai 2019)

1- quand je dis cellule c'est sous mon appli web sous firefox

2- les caractères spéciaux du genre : /*-+,,.:+%*"'()!?


----------



## jaiglisséchef (23 Mai 2019)

et aussi <>@#&


----------



## zeltron54 (23 Mai 2019)

Pour l'appli web, désolé je ne connaît pas du tout, je ne sais pas comment envoyer un collé dans l'appli.

Pour tes caractères spéciaux, fait une liste de tous les caractères que tu veux remplacer et par quoi. ( un espace je suppose ). Autre question si on remplace un de ces caractères par un espace et qu'il existe déjà un espace à coté on garde les 2 espaces ou on supprime le caractère tout simplement.

Je sais je suis chiant, mais il faut être précis si on veut que ça  fonctionne correctement...

Avec ta liste et ces détails j' inclus ça dés qu j'ai un moment.


----------



## jaiglisséchef (23 Mai 2019)

Pas de problème tu fais ça quand tu peux, c'est déja pas mal comme ça.
pour le coller, si ça pouvait être comme pour textedit un simple coller ça irait (enfin pour moi...  )
pour les caractères :   <>@#&:/*-+_,,.:+=%*"'()!? 
il ne faut jamais plus d'un espace dans ma cellule donc si aze123- aze -> aze 123 aze
Si tu passes sur bordeaux, je te paie une bière, tu l'as bien méritée.


----------



## baron (23 Mai 2019)

jaiglisséchef a dit:


> il ne faut jamais plus d'un espace dans ma cellule donc si aze123- aze -> aze☐123☐aze


J'imagine que tu veux dire : « il ne faut jamais plus d'un espace consécutif dans ma cellule », parce que dans ton exemple ci-dessus il y en a deux (que j'ai mis en rouge).

D'autre part, à la lecture de ton premier post (et des exemples subséquents), il m'avait semblé que tu souhaitais séparer les _chaînes de nombres_ ou de lettres par une espace ; pas que _chaque chiffre_ soit encadré par une espace. (C'est d'ailleurs peut-être bien ce que fait le script de zeltron54  — je ne suis pas certain de bien le lire…)

P.S. Pour toi, les lettres accentuées sont-elles à considérer comme caractères spéciaux ?


----------



## jaiglisséchef (23 Mai 2019)

Bonsoir Baron, comme tu vois je ne suis pas un programmeur  pour moi c'est du chinois,

alors c'est bien comme dans l'exemple, pas plus d'un espace consécutif , il ne faut pas que chaque chiffre soit encadré, seulement lettres ET chiffres : abcd55zz -> abcd☐55☐zz

d'après mes tests, le 2e script de zeltron54 fonctionne parfaitement, c'est vraiment mon besoin après pour le reste... c'est la climatisation dans une Dacia 

pour les lettres accentuées si elles pouvaient perdre leurs coiffes : azeéê55aaa -> azeee 55 aaa après c'est plus rare donc moins embattant sinon elles restent comme elles sont.

Merci !!!!!!!


----------



## zeltron54 (23 Mai 2019)

Bonsoir teste ce script et dis-moi...
A la suite du script d'avant j'ai ajouté le remplacement des caractères spéciaux par des espaces, puis la suppression des espaces successifs.

Pour le collé un CMD/V c'est pas plus contraignant qu'un clic souris spécial 


```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
 
    repeat with i from 2 to leNbchar - 1
        set place to place + 1
        set lechar1 to character i of laref
        set lechar2 to character (i + 1) of laref
        set lechar0 to character (i - 1) of laref
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                if lechar0 = " " then
                else
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
            if lechar2 is not in lesChar then
                if lechar2 = " " then
                else
                    set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
        end if
    end repeat
 
    set lesCharspe to {"<", ">", "@", "#", "&", ":", "/", "*", "-", "+", "_", ",", ".", ":", "+", "=", "%", "*", "'", "(", ")", "!", "?"}
    repeat with i from 1 to count of every character of newref
        if character i of newref is in lesCharspe then
            set newref to characters 1 thru (i - 1) of newref & " " & characters (i + 1) thru -1 of newref as string
        end if
    end repeat
 
    set supespace to newref
    set place to 1
    repeat with i from 1 to (count of every character of newref) - 2
        set lechar1 to character place of supespace
        set lechar2 to character (place + 1) of supespace
     
        if lechar1 = " " then
            if lechar2 = " " then
                set supespace to characters 1 thru (place - 1) of supespace & characters (place + 1) thru -1 of supespace as string
                set place to place - 1
            end if
        end if
        set place to place + 1
    end repeat
 
    set the clipboard to supespace
end tell
```


----------



## zeltron54 (23 Mai 2019)

Mince j'avais oublié le caractère    "    c'est un peut particulier. je te mets le script modifié.


```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
   
    repeat with i from 2 to leNbchar - 1
        set place to place + 1
        set lechar1 to character i of laref
        set lechar2 to character (i + 1) of laref
        set lechar0 to character (i - 1) of laref
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                if lechar0 = " " then
                else
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
            if lechar2 is not in lesChar then
                if lechar2 = " " then
                else
                    set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
        end if
    end repeat
   
    set lesCharspe to {"<", ">", "@", "#", "&", ":", "/", "*", "-", "+", "_", ",", ".", ":", "+", "=", "%", "*", "'", "(", ")", "!", "?", "\""}
    repeat with i from 1 to count of every character of newref
        if character i of newref is in lesCharspe then
            set newref to characters 1 thru (i - 1) of newref & " " & characters (i + 1) thru -1 of newref as string
        end if
    end repeat
   
    set supespace to newref
    set place to 1
    repeat with i from 1 to (count of every character of newref) - 2
        set lechar1 to character place of supespace
        set lechar2 to character (place + 1) of supespace
       
        if lechar1 = " " then
            if lechar2 = " " then
                set supespace to characters 1 thru (place - 1) of supespace & characters (place + 1) thru -1 of supespace as string
                set place to place - 1
            end if
        end if
        set place to place + 1
    end repeat
   
    set the clipboard to supespace
end tell
```


----------



## zeltron54 (23 Mai 2019)

Tiens mon nouveau post n'est pas visible ! 

Edit: Il est là


----------



## zeltron54 (23 Mai 2019)

Erreur !


----------



## jaiglisséchef (24 Mai 2019)

C'est parfait, c'est exactement ce que je voulais.

Sur une référence aa111-22-b3cd au lieu de 10 actions il n'en reste plus que 3. De plus, pas de risques d'erreur.

Merci encore pour le temps que tu as passé sur mon problème. C'est pas grave pour le "Coller", c'est moins problématique et tout aussi rapide.

Je ne t'embête plus


----------



## zeltron54 (24 Mai 2019)

Pas de problème, tu ne m'embêtes pas !

Content pour toi.
bonne journée.


----------



## jaiglisséchef (24 Mai 2019)

C'est encore moi 
j'ai juste un petit problème quand ma ref se termine par un chiffre, il n'ajoute pas le dernier espace.

aaa55b5 -> aaa 55 b5


----------



## zeltron54 (24 Mai 2019)

Ah !     je regarde !


----------



## zeltron54 (24 Mai 2019)

Bon effectivement si la ref se terminait par un seul chiffre ça ne fonctionnait pas.
je te met le nouveau modifié
Désolé pour le bug (on pense pas à tout)  


```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
   
    repeat with i from 2 to leNbchar
        set place to place + 1
        if i = leNbchar then
            set lechar2 to "a"
        else
            set lechar2 to character (i + 1) of laref
        end if
        set lechar1 to character i of laref
        set lechar0 to character (i - 1) of laref
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                if lechar0 = " " then
                else
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
            if i = leNbchar then
            else
                if lechar2 is not in lesChar then
                    if lechar2 = " " then
                    else
                        set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                        set place to (place + 1)
                    end if
                end if
            end if
        end if
    end repeat
   
    set lesCharspe to {"<", ">", "@", "#", "&", ":", "/", "*", "-", "+", "_", ",", ".", ":", "+", "=", "%", "*", "'", "(", ")", "!", "?", "\""}
    repeat with i from 1 to count of every character of newref
        if character i of newref is in lesCharspe then
            set newref to characters 1 thru (i - 1) of newref & " " & characters (i + 1) thru -1 of newref as string
        end if
    end repeat
   
    set supespace to newref
    set place to 1
    repeat with i from 1 to (count of every character of newref) - 2
        set lechar1 to character place of supespace
        set lechar2 to character (place + 1) of supespace
       
        if lechar1 = " " then
            if lechar2 = " " then
                set supespace to characters 1 thru (place - 1) of supespace & characters (place + 1) thru -1 of supespace as string
                set place to place - 1
            end if
        end if
        set place to place + 1
    end repeat
   
    set the clipboard to supespace
end tell
```


----------



## jaiglisséchef (24 Mai 2019)

"Désolé pour le bug (on pense pas à tout)  "

Je suis le premier à l'avouer 

ça marche impec. Merci[/QUOTE]


----------



## jaiglisséchef (24 Mai 2019)

"Désolé pour le bug (on pense pas à tout)  "

Je suis le premier à l'avouer.

Ca marche impec. Merci


----------



## jaiglisséchef (24 Mai 2019)

zeltron54 a dit:


> Désolé pour le bug (on pense pas à tout)



Je suis le premier à l'avouer 

Ca marche impec. Merci


----------



## jaiglisséchef (24 Mai 2019)

L'interface du forum cafouille chez moi, je ne sais pas comment supprimer mes doublons. Quoi qu'il en soit... Merci pour ton aide.


----------



## jaiglisséchef (5 Juin 2019)

Bonjour Zeltron54, excuse moi encore de te déranger j'ai un tout petit bug avec ton script, en effet si la ref commence par un seul chiffre ça ne fonctionne pas. 1xxx555 -> 1xxx 555
sinon c'est du caviar tous les jours


----------



## zeltron54 (5 Juin 2019)

Bonjour,
Alors voilà une nouvelle version...
J'espère que ça te conviendra, dis-moi ci c'est bon ....

```
tell application "Finder"
    set laref to the clipboard
    set lesChar to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    set leNbchar to count of every character of laref
    set place to 1
    set newref to laref
   
    repeat with i from 2 to leNbchar
        set place to place + 1
        if i = leNbchar then
            set lechar2 to "a"
        else
            set lechar2 to character (i + 1) of laref
        end if
        set lechar1 to character i of laref
        set lechar0 to character (i - 1) of laref
       
        if i = 2 then
            if lechar0 is in lesChar then
                if lechar1 is not in lesChar then
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
            end if
        end if
       
        if lechar1 is in lesChar then
            if lechar0 is not in lesChar then
                if lechar0 = " " then
                else
                    set newref to characters 1 thru (place - 1) of newref & " " & characters place thru -1 of newref as string
                    set place to (place + 1)
                end if
               
            end if
            if i = leNbchar then
            else
                if lechar2 is not in lesChar then
                    if lechar2 = " " then
                    else
                        set newref to characters 1 thru (place) of newref & " " & characters (place + 1) thru -1 of newref as string
                        set place to (place + 1)
                    end if
                end if
            end if
        end if
    end repeat
   
    set lesCharspe to {"<", ">", "@", "#", "&", ":", "/", "*", "-", "+", "_", ",", ".", ":", "+", "=", "%", "*", "'", "(", ")", "!", "?", "\""}
    repeat with i from 1 to count of every character of newref
        if character i of newref is in lesCharspe then
            set newref to characters 1 thru (i - 1) of newref & " " & characters (i + 1) thru -1 of newref as string
        end if
    end repeat
   
    set supespace to newref
    set place to 1
    repeat with i from 1 to (count of every character of newref) - 2
        set lechar1 to character place of supespace
        set lechar2 to character (place + 1) of supespace
       
        if lechar1 = " " then
            if lechar2 = " " then
                set supespace to characters 1 thru (place - 1) of supespace & characters (place + 1) thru -1 of supespace as string
                set place to place - 1
            end if
        end if
        set place to place + 1
    end repeat
   
    set the clipboard to supespace
end tell
```


----------



## jaiglisséchef (5 Juin 2019)

Super ca marche parfaitement, bon si tu passes sur Bordeaux, je t'offre l'entreprise Heineken
merci encore.


----------



## zeltron54 (5 Juin 2019)

Content pour toi
Bonne soirée !


----------

