Séparer chiffres et lettres par un espace

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
Tu voudrais quoi , idéalement, ?
Qu'on regarde ce qui est faisable...
 

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
Ok ! je regarde pour faire un script qui agit dans le presse papier...
 

zeltron54

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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.

Bloc de code:
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.

Bloc de code:
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
 
Dernière édition:

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
Je n'ai pas compris ce que tu veux faire avec ton CMD+V .
Explique clairement ce que tu veux obtenir.
 

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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

Membre junior
4 Octobre 2010
34
0
48
1- quand je dis cellule c'est sous mon appli web sous firefox

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

zeltron54

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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...:):p

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

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
22 Avril 2008
1 161
214
LLN
il ne faut jamais plus d'un espace dans ma cellule donc si aze123- aze -> aze123☐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 :coucou: — 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 ?
 
Dernière édition:

jaiglisséchef

Membre junior
4 Octobre 2010
34
0
48
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

Membre d’élite
29 Mars 2008
1 600
247
Lorraine
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 ;)

Bloc de code:
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
 
Dernière édition: