split-string

守岡 知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2001年 7月 9日 (月) 18:22:42 JST


私も最近 GT 2000 の code book を変換する program 書いている時に
split-string の非互換性ではまりました。

これは双方の仕様の問題なので poe ではどうしようもないですね。APEL でど
うしてもやるなら pstring.el とかを作って、emacs:split-string と
xemacs:split-string みたいなのを作るとかですかね?(名前空間 (package)
欲しいですね)

;; 個人的には変なことをしない XEmacs のものの方が好き。

>>>>> In [apel-ja : No.00648] 
>>>>>	"山岡さん" = Katsumi Yamaoka <yamaoka @ jpl.org> wrote:

山岡さん> >>>>> In [apel-ja : No.00647] 
山岡さん> >>>>>	"OHASHI, Akira" (大橋 彰) <bg66 @ koka-in.org> wrote:

山岡さん> >> (delete "" (split-string "/hoge/fuga" "/"))

大橋さん> これだと (split-string "/hoge//fuga" "/") の間の "" も消えちゃ
大橋さん> います。

山岡さん> むむっ ^^;;、

山岡さん> (let ((path "/hoge//fuga"))
山岡さん>   (if (string-match "^/?\\(.+\\)/?$" path)
山岡さん>       (split-string (match-string 1 path) "/")
山岡さん>     (split-string path "/")))

山岡さん> これは文字列の最初と最後の "/" を無視させているだけですが、この
山岡さん> 調子で発展させていくと (どちらかの) split-string の定義と同じよ
山岡さん> うなものになってしまうのでしょうね。:-p

GNU Emacs で XEmacs の split-string を作るなら

(defun xemacs-split-string (string &optional separators)
  (unless separators
    (setq separators "[ \f\t\n\r\v]+"))
  (let ((ret (split-string string separators)))
    (if (string-match (concat "^" separators) string)
	(setq ret (cons "" ret)))
    (if (string-match (concat separators "$") string)
	(setq ret (append ret '(""))))
    ret))

みたいな感じでしょうか?逆に XEmacs で GNU Emacs の split-string を作
るなら

(defun emacs-split-string (string &optional separators)
  (unless separators
    (setq separators "[ \f\t\n\r\v]+"))
  (let ((ret (split-string string separators)))
    (if (string-match (concat "^" separators) string)
	(setq ret (cdr ret)))
    (if (string-match (concat separators "$") string)
	(setq ret (butlast ret)))
    ret))

見たいな感じでしょうか?

-- 
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │  ─  /    ─   ┼─     ┬                ─   ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




More information about the APEL-ja mailing list