验证一行中正确的字段数?

时间:2011-11-06 03:26:46

标签: emacs elisp

在Emacs中,我操纵了一些管道分离的数据,我想建立一些验证功能。我想要的第一个功能是确保我有适当数量的字段。在这个例子中,我有四列数据。此时我想要第二行和第四行的警告,因为至少有三个分隔符(|)。

1|2|3|4
one|two|
four|five|6|7
abc||

1 个答案:

答案 0 :(得分:3)

要计算当前行中的管道字符数,请尝试以下操作:

(count-matches "|" (point-at-bol) (point-at-eol))

要验证整个缓冲区,请考虑以下函数:

(require 'cl)
(defun invalid-points ()
  (save-excursion
    (goto-char (point-min))
    (loop while (re-search-forward ".$" nil t)
          unless (= 3 (count-matches "|" (point-at-bol) (point-at-eol)))
          collect (point))))

将返回包含无效字段数的行的位置列表(因此,仅当整个缓冲区有效时才返回nil。)

对于交互式使用,也许最简单的方法是滥用font-lock-mode来突出显示无效行(反之亦然):

(font-lock-add-keywords
 nil '(("^[^|\n]*\\(|[^|\n]*\\)\\{3\\}$" 0 highlight)))