在Emacs中,我操纵了一些管道分离的数据,我想建立一些验证功能。我想要的第一个功能是确保我有适当数量的字段。在这个例子中,我有四列数据。此时我想要第二行和第四行的警告,因为至少有三个分隔符(|)。
1|2|3|4 one|two| four|five|6|7 abc||
答案 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)))