パターンマッチ#2
つづき。
正規表現からパターンマッチした文字列を抜き出す時は、
substring とmatch-beginning とmatch-end を使う。
(defun to_s (o) (if (eq o EOF) "" (cond ((string-match MGH_vlt o) (symbol-name 'MGH_vlt)) ((string-match MGH_flt o) (format "%-10s: %s->%s %s %s %s" (symbol-name 'MGH_flt) (substring o (match-beginning 3) (match-end 3)) (substring o (match-beginning 6) (match-end 6)) (substring o (match-beginning 7) (match-end 7)) (substring o (match-beginning 8) (match-end 8)) (substring o (match-beginning 9) (match-end 9)) ) ) ((string-match MGH_ff o) (format "%-10s: %s->%s %s %s %s" (symbol-name 'MGH_ff) (substring o (match-beginning 3) (match-end 3)) (substring o (match-beginning 6) (match-end 6)) (substring o (match-beginning 7) (match-end 7)) (substring o (match-beginning 8) (match-end 8)) (substring o (match-beginning 9) (match-end 9)) ) ) ((string-match MGD_monoTR o) (format "%-10s: %s" (symbol-name 'MGD_monoTR) (substring o (match-beginning 1) (match-end 1)) ) ) ((string-match MGD_ffmtTR o) (format "%-10s: %s" (symbol-name 'MGD_ffmtTR) (substring o (match-beginning 1) (match-end 1)) ) ) ((string-match MGD_initTR o) (format "%-10s: %s" (symbol-name 'MGD_initTR) (substring o (match-beginning 1) (match-end 1)) ) ) ((string-match MGD_extrTR o) (symbol-name 'MGD_extrTR)) ((string-match MGD_termTR o) (symbol-name 'MGD_termTR)) ((string-match MGT o) (format "%-10s: %s" (symbol-name 'MGT) (substring o (match-beginning 1) (match-end 1)) ) ) ((string-match Invalid o) (symbol-name 'Invalid)) ) )) (seq-rewind f) (while (setq a (seq-read f)) (insert (to_s a) "\n") ) MGH_flt : 333333333333->666666666666 EIAJ0502 8888 999 MGD_monoTR: 00001 MGD_initTR: 00002 MGD_termTR MGD_initTR: 00003 MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_termTR MGT : 00003 MGH_ff : 333333333333->666666666666 EIAJ0502 8888 999 MGD_ffmtTR: 00001 MGD_ffmtTR: 00002 MGD_ffmtTR: 00003 MGT : 00003 nil
うーん。美しくない気がするが。