パターンマッチ#1
文字列から正規表現を使ってパターンマッチをするには、string-matchを使う。
バッファを対象にパターンマッチは、re-search-forwardのようね。
CIIフォーマットでは、データレコードで類似のパターンがあるので、
パターンマッチの照合順序を気をつけないと別の種類のデータレコード
と識別されてしまう。
- 可変データ長250バイト以下固定長レコード(MGD_monoTR)
- 固定データ長のデータレコード(MGD_ffmtTR)
- 可変データ長251バイト以上固定長レコードの最終レコード(MGD_termTR)
この順序でパターンマッチするぜよ。
(defvar MGH_vlt "^0C.\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)............\\\(....\\\)\\\(...\\\)\\\(...\\\)10.*") (defvar MGH_flt "^0C.\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)............\\\(....\\\)\\\(...\\\)\\\(...\\\)11.*") (defvar MGH_ff "^0C.\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)\\\(............\\\)............\\\(....\\\)\\\(...\\\)\\\(...\\\)20.*") (defvar MGD_monoTR "^9D\\\([0-9][0-9][0-9][0-9][0-9]\\\).*\xfe.*") (defvar MGD_initTR "^1D\\\([0-9][0-9][0-9][0-9][0-9]\\\).*") (defvar MGD_extrTR "^[1-8].*") (defvar MGD_termTR "^9.*") (defvar MGD_ffmtTR "^9D\\\([0-9][0-9][0-9][0-9][0-9]\\\).*") (defvar MGT "^0E\\\([0-9][0-9][0-9][0-9][0-9]\\\).*") (defvar Invalid "^.*") (defvar EOF nil)
ちゃんと照合できたか確かめるために、結果出力用の関数を定義する。
(defun to_s (o) (if (eq o EOF) "" (cond ((string-match MGH_vlt o) (symbol-name 'MGH_vlt)) ((string-match MGH_flt o) (symbol-name 'MGH_flt)) ((string-match MGH_ff o) (symbol-name 'MGH_ff)) ((string-match MGD_monoTR o) (symbol-name 'MGD_monoTR)) ((string-match MGD_ffmtTR o) (symbol-name 'MGD_ffmtTR)) ((string-match MGD_initTR o) (symbol-name 'MGD_initTR)) ((string-match MGD_extrTR o) (symbol-name 'MGD_extrTR)) ((string-match MGD_termTR o) (symbol-name 'MGD_termTR)) ((string-match MGT o) (symbol-name 'MGT)) ((string-match Invalid o) (symbol-name 'Invalid)) ) )) (setq f (find-file-noselect "~/test.cii")) (while (setq a (seq-read f)) (insert (to_s a) "\n") ) MGH_flt MGD_monoTR MGD_initTR MGD_termTR MGD_initTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_extrTR MGD_termTR MGT MGH_ff MGD_ffmtTR MGD_ffmtTR MGD_ffmtTR MGT nil
OK。OK。