パターンマッチ#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

うーん。美しくない気がするが。