Recherche de caractères spéciaux à la volée ?

Ah, j'ai un autre cas de figure intéressant :

Capture d’écran 2021-11-08 à 17.39.57.jpg

Avec la ligne : error "Erreur dans Finder : Impossible d’effectuer l’opération car il existe déjà un élément de ce nom." number -48

Mais toujours pas de fichier text en vue sur le bureau…
 
Et puis je découvre une autre occurrence.
Le cas de plusieurs caractères identiques à supprimer dans un nom de fichier :

Capture d’écran 2021-11-08 à 17.46.40.jpg
 
Bonsoir,
une version, ou j'ai supprimé quelques Bugs, et ou j'ai essayé d'envisager un maximum de cas possibles...
Mais quand je vois les noms de tes fichiers et dossiers, je ne suis pas sur d'avoir tout prévu ! LOL
Patience on va y arriver :D
Bloc de code:
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------_
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
    my inspecter(lechemin)
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                set lefichier to chaque_fichier
                set AppleScript's text item delimiters to {""}
                set nom to name of chaque_fichier --récupère le nom du fichier
                set extens to file nom in lechemin --recupere l extension du fichier
                set lextension to name extension of extens
                set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
                set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
                set elements to text items of nom
                set nomcourt to (items 1 thru -2 of elements) as string
                set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
               
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
               
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    on error
                        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                        write "Le fichier n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
               
            end tell
        end repeat
       
        set a to container of lechemin as string
        set aa to lechemin as string
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {":"} --récupère la partie avant le dernier "."
        set nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
       
        set nouveaunom to my remplace(nomcourt, pourerreur)
       
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
       
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46}
    set par to {65, 65, 65, 97, 65, 65, 97, 97, 97, 97, 97, 97, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 69, 69, 69, 69, 101, 101, 101, 101, 67, 99, 73, 73, 73, 73, 105, 105, 105, 105, 85, 85, 85, 85, 117, 117, 117, 117, 121, 78, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95}
    set nbar to count aremplacer
    set new to mavar
   
    set lesblancs to count character in new
    repeat
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in new
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    set newcar to ASCII character (item j of par)
                    if i = 1 then
                        set new to newcar & (text 2 thru nb of new)
                        set avant to ""
                    else
                        set avant to text 1 thru (i - 1) of new
                    end if
                    if i = nb then
                        set new to avant & newcar
                    else
                        set new to avant & newcar & text nb thru -(nb - i) of mavar
                    end if
                   
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
 
Ah parce qu'en plus, tu ne lâches pas l'affaire !?
Je ne sais pas si c'est du courage, une réelle compétence ou alors une certaine inconscience...;)
Plus on modifie et plus on trouve des trucs à modifier. Ceci dit, ça aura bien une fin quand même.
Je teste demain matin.
Merci encore Zeltron.
 
Je suis têtu ! ;) et j'aime bien les défis, cela me maintient les facultés de raisonnement en état de fonctionnement (c'est dur de vieillir !):bigtears:
alors j'attends les retours pour les nouvelles modifs à moins que:D

A demain...
 
  • J’aime
Réactions: Vinzzz25
Et ce sont toujours les fontes sans extension qui sont présentes dans les infos rassemblées de certains dossiers.
Et de tels dossiers sont assez fréquents vu que je suis un …assez vieux… graphiste… :siffle:
Tu sais si, à partir du script, je peux localiser le fichier coupable ? Parce que concernant les polices, je peux avoir plusieurs fichiers portant le même nom… mais un seul sera sûrement corrompu ou à problème, notamment ceux qui pèsent… 0 octet.


Voir la pièce jointe 245225
Ce n'est pas le sujet mais au cas où l'information ne te serait pas parvenue, les polices Type 1 (PostScript) dont on annonce depuis une vingtaine d'années qu'il faudrait s'en passer au profit de polices OpenType, sont en voie d'être définitivement répudiées par Adobe et ses logiciels (à l'exception d'Acrobat) :
Fin de la prise en charge des polices PostScript Type 1

il peut être prudent d'enregistrer certains de tes fichiers en PDF pour pouvoir les relire — ou de mettre à jour tes polices pour celles qui te sont encore utiles.
 
  • J’aime
Réactions: Vinzzz25
Oui merci pour ça aussi. Indesign (dans les versions récentes) nous le rappelle assez souvent. Exit all TTF et ce sera une très bonne chose, bien que les otf ne soient pas toutes encore très au point…

Côté new scipt, j'ai eu ça en entrée de travail :
error "Impossible de convertir items 1 thru -2 of {\" \"} en type string." number -1700 from items 1 thru -2 of {" "} to string

J'ai essayé de te remettre les ital, les gras et les couleurs. Je ne sais si ça te renseigne...

Et je crois qu'il ne prend toujours pas les espaces en tout début de ligne (j'en mettais souvent pour faire remonter certains fichiers en haut de la liste).
 
J'avais supprimé les espace en fin (pas en début)!
Quand à l'erreur il me serait utile de savoir le nom du fichier sur lequel cela se produit, de plus on n'avait pas traiter le caractère antislash (\)...
 
Comment je fais alors pour trouver le fichier qui pose problème ? Le .txt ne se générant pas sur le bureau pour l'instant.
 
Je précise que ton job va être diffusé ensuite auprès de tous mes collègues graphistes qui rencontrent les mêmes problèmes de synchro...
Honor & Glory…
 
  • J’aime
Réactions: Vinzzz25
J'ai ajouté le traitement des espaces en début et le caractère antislash remplacé par un tiret bas.

J'ai également ajouté la création du fichier erreur lors de la récupération du nom de fichier car je pense que c'est là que se situe le problème, tu pourras donc récupérer ce nom dans le fichier erreur !

Bloc de code:
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
    my inspecter(lechemin)
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
                    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
                    set elements to text items of nom
                    set nomcourt to (items 1 thru -2 of elements) as string
                    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                on error
                    set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                    write "Le nom du fichier n'a pas pu extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    on error
                        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                        write "Le fichier n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
                
            end tell
        end repeat
        
        set a to container of lechemin as string
        set aa to lechemin as string
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {":"} --récupère la partie avant le dernier "."
        set nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
        
        set nouveaunom to my remplace(nomcourt, pourerreur)
        
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
        
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92}
    set par to {65, 65, 65, 97, 65, 65, 97, 97, 97, 97, 97, 97, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 69, 69, 69, 69, 101, 101, 101, 101, 67, 99, 73, 73, 73, 73, 105, 105, 105, 105, 85, 85, 85, 85, 117, 117, 117, 117, 121, 78, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95}
    set nbar to count aremplacer
    set new to mavar
    
    set lesblancs to count character in new
    repeat
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    
    
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in new
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    set newcar to ASCII character (item j of par)
                    if i = 1 then
                        set new to newcar & (text 2 thru nb of new)
                        set avant to ""
                    else
                        set avant to text 1 thru (i - 1) of new
                    end if
                    if i = nb then
                        set new to avant & newcar
                    else
                        set new to avant & newcar & text nb thru -(nb - i) of mavar
                    end if
                    
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
 
New message :

Capture d’écran 2021-11-09 à 10.35.26.jpg

Capture d’écran 2021-11-09 à 10.35.38.jpg

On est quand même repassé à 1250 problèmes de synchronisation... cool !
 
Dernière édition:
Et tu n'as pas de fichier "les erreurs.txt" sur le bureau ?
 
Si si, impeccable et il est assez fourni...
Essentiellement des fontes sans extension. Je supprime au fur et à mesure les dossiers de vieilles polices. .
 
Ah ! c'était des fichiers qui avait quel genre de nom ?
 
Oui le nom du fichier sans extension.
Dans le fichier "les erreurs.txt" il y a le chemin complet du fichier qui a posé problème avec à la fin le nom avec son extension...
J'aimerai avec ce nom pour comprendre !
 
Le fichier pour quelques fontes sans extension dans un dossier. (je les ai supprimées).
Par contre, il me semble qu'il faut supprimer (ou renommer) chaque fichier text généré pour que le script en génère un autre. Ah zut : je ne peux pas joindre de fichier .text ici.
Je te le colle :

Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GaramITCbyBTBolConIta
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GaramITCbyBTBolNar
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GaramITCbyBTUltCon
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GarmdITC BkCn/BdCn BT
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GarmdITC LtNr/BdNr BT
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GarmdITC UltCn BT
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:Gill Sans 1
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:GillSanLig
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSanBlaCap
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSanBlaIta
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSanBolCap
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSanLigCap
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSanPla
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSans 3 Light
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSans 5
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert 19 juin 2011:Fonts:TheSans 7 Bold
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:OHBx 2011 - 2012:Dossier Concert Samedi 14 janvier 2012:Fonts:Dingbats FF
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:photos OHBx:Instruments:Famille d'instruments
Le nom du fichier n'a pas pu extrait : WKS-012676:Users:y.bogati:OneDrive - SCNBDX:Documents:Orchestre:OHBX:photos OHBx:photos anciennes:pascal Lacombe
 
Bon !
je n'avais jamais vu de fichier sans extension...
je vais étudier le cas, et voir ce qu'il est possible de faire ...
Allez ! bon appétit ! ;)
A plus tard !