11
votes

Comment analyser le nom du fichier de base à l'aide de Script-fu

Utilisation de GIMP 2.6.6 pour Mac OS X (sous X11) tel que téléchargé de gimp.org.

J'essaie d'automatiser un processus manuel ennuyeux avec script-fu. J'avais besoin d'analyser le nom du fichier image pour enregistrer diverses calques en tant que nouveaux fichiers à l'aide d'un suffixe sur le nom du fichier d'origine. P>

Mes tentatives originales sont passées comme ceci mais ont échoué car (String-Search. .) code> ne semble pas être disponible sous 2.6 (une modification du moteur de script?). P>

(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
    (set! basefilename (vector-ref buffer 1))
    ) 


0 commentaires

6 Réponses :


6
votes

Contexte

Gimp 2.6.6 Windows Vista SP2 P>

Objectif H2>

Extrait du nom de fichier d'origine sans son extension. P>

Symptôme H2>

Erreur: Eval: variable non liée: re-matppe-nth em> p> blockQuote>

suggestion possible h2>

menu GIMP " filtres strong>"> " script-fu strong>"> " console forte > " p>

dans la zone d'entrée, collez la définition de fonction script-fu suivante Ensuite, appuyez sur la touche ENTER FORT>: P>

"screen"


1 commentaires

Merci! La straillot était exactement ce que je cherchais.



8
votes

Pas vraiment une solution correcte:

> (nom de fichier-basename "this.is.a.long.filename.jpg")

"Ceci"

Une meilleure implémentation: xxx


1 commentaires

Si l'extension est manquante (Morph-FileName "" A.B. "" "Suivant") retourne ().



5
votes

Ma version se divise le nom de fichier (F) dans les pièces délimitées par séparateur ("." Dans ce cas); gouttes la dernière partie; et re-combine-les avec séparateur à nouveau xxx

donc xxx

et xxx


0 commentaires

0
votes

Pour ceux qui recherchent une vraie fonctionnalité de string-remplacer, voici une fonction que j'ai écrite pour une utilisation dans Script Fu

(define (string-replace strIn strReplace strReplaceWith)
    (let*
        (
            (curIndex 0)
            (replaceLen (string-length strReplace))
            (replaceWithLen (string-length strReplaceWith))
            (inLen (string-length strIn))
            (result strIn)
        )
        ;loop through the main string searching for the substring
        (while (<= (+ curIndex replaceLen) inLen)
            ;check to see if the substring is a match
            (if (substring-equal? strReplace result curIndex (+ curIndex replaceLen))
                (begin
                    ;create the result string
                    (set! result (string-append (substring result 0 curIndex) strReplaceWith (substring result (+ curIndex replaceLen) inLen)))
                    ;now set the current index to the end of the replacement. it will get incremented below so take 1 away so we don't miss anything
                    (set! curIndex (-(+ curIndex replaceWithLen) 1))
                    ;set new length for inLen so we can accurately grab what we need
                    (set! inLen (string-length result))
                )
            )
            (set! curIndex (+ curIndex 1))
        )
       (string-append result "")
    )
)


0 commentaires

4
votes

Merci beaucoup Philcolbourn pour avoir souligné une façon "simple" de le faire. Malheureusement, la fonction Butlast est obsolète: http://www.gimp.org/docs/script-fu-update .html # Imprété

Voici la version de Philcolbourn avec le remplacement suggéré: xxx


0 commentaires

1
votes

comme dans gimp 2.8 "gimp-image-uri" doit être utilisé pour obtenir le nom de fichier de fichier JPG, mais gimp-image-get-urive offre le chemin complet, j'ai utilisé cette fonction pour extraire le seul Nom de la photo (sans le suffixe ".jpg"):

(let * (
(URINAME (voiture (gimp-image-get-uri)))
(Nom de base (voiture (revers (STRAFATUP (voiture (CLASHUP URINAME ».")) "/"))))
...
)
...
)


0 commentaires