2012-09-05 5 views

risposta

17

Un modo è quello di utilizzare substring (o substring-no-properties):

(substring "Test.m" 0 -2) => "Test" 

(substringSTRINGDA&optionalTO)

ritorno una nuova stringa i cui contenuti sono una stringa di STRING. Il stringa restituita è costituito dai caratteri tra indice DA (compreso) e indice PER (esclusiva) di STRING. DA e TO sono con zero indicizzazione: 0 indica il primo carattere di STRING. I valori negativi vengono contati dalla fine di STRING. Se TO è nil, la sottostringa viene eseguita fino alla fine di STRING.

+0

Grazie mille. – Peter

2

Probabilmente l'opzione più flessibile (anche se non è chiaro se avete bisogno di flessibilità) sarebbe quella di utilizzare replace-regexp-in-string:

Vedi Chfreplace-regexp-in-stringRET

esempio:

(replace-regexp-in-string "\\..*" "" "Test.m") 
7

Nel tuo caso particolare, ti potrebbe piacere usare file-name-sans-extension.

6

Stefan's answer è idiomatico, quando hai solo bisogno di un nome di file senza estensione. Tuttavia, se si manipolano pesantemente file e filepath nel codice, si consiglia di installare l'API di file e directory f.el di Johan Andersson, poiché fornisce molte funzioni assenti in Emacs con un'API coerente. Scopri le funzioni f-base e f-no-ext:

(f-base "~/doc/index.org") ; => "index" 
(f-no-ext "~/doc/index.org") ; => "~/doc/index" 

Se, invece, si lavora con corde spesso, installare Magnar Sveen del s.el per le stesse ragioni. Potreste essere interessati a s-chop-suffix:

(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index" 

Per sottostringa generico utilizzo recupero dkim's answer.

+0

Questa è una bella soluzione di alto livello. Grazie. – Jabba