[Common Lisp] PATHNAMEから情報を取得

わたくし、本職はJavaプログラマなのですが「ファイルのパスを受け取ってゴニョゴニョする」ことがそれなりにあるなーと思いました。具体的に言うと

  • ファイルのフルパスからファイル名を取得
  • ファイルのフルパスから拡張子を取得

は結構頻繁にやっている気がします。フルパスの後ろのほうからディレクトリ区切り文字なり、ドットなりの位置を探して それ以降を取得って感じ。

Javaでやってることは、Common Lispでどうやるのかなーと思ったので、後のために書いておきます。

;; pathname からファイル名を取得
(file-namestring #P"/tmp/hoge.tgz")
;; => "hoge.tgz"

;; pathname から拡張子を取得
(pathname-type #P"/tmp/hoge.tgz")
;; => "tgz"

;; pathname からファイル名(拡張子無し)を取得
(pathname-name #P"/tmp/hoge.tgz")
;; => "hoge"

;; pathname からディレクトリを取得
(pathname-directory #P"/tmp/hoge.tgz")
;; => (:ABSOLUTE "tmp")

(pathname-directory #P"tmp/hoge.tgz")
;; => (:RELATIVE "tmp")

;; pathname からドライブレターを取得
(pathname-device #P"D:/tmp/hoge.tgz")
;; => "D"

(pathname-directory) は戻り値の carを見ると、渡したpathnameが相対パス絶対パスか分かるのですね。

ちなみに Windows絶対パスにはドライブレターが付きますが、これは (pathname-directory) では返ってきませんでした。

Weblocksの話

Weblocksも触っています。widgetでも navigationとか flashくらいは書く内容あるし、view関係はまだ全然書いてないし、store関係もいっぱい書きたいです。でもしばらく書けないのでした。ちょっと書けない。そういう心境。
Weblocks大好き。CSSがもっと書きやすいと嬉しいなぁ、って思ったけど。