有一套题库,想转换成exam vce能导入的格式,请教能否帮写段elisp代码或如何操作?
原题举例:
- 以下属于一线城市的有是(AB).多选题
A.北京
B.上海
C.武汉
希望转成:
- 以下属于一线城市的有是().多选题
A.北京
B.上海
C.武汉
Answer:AB
也就是将小括号()里面的答案提取出来,再写到本题最后或下一题前面。
有一套题库,想转换成exam vce能导入的格式,请教能否帮写段elisp代码或如何操作?
原题举例:
A.北京
B.上海
C.武汉
希望转成:
A.北京
B.上海
C.武汉
Answer:AB
也就是将小括号()里面的答案提取出来,再写到本题最后或下一题前面。
谢谢。经过一摸索,终于解决个大概,早上弄时少了save-match-data,结果插入内容时影响了match结果,导致第2题起插入些乱的内容,最后一题手动弄下:
(defun trans-vce ()
(interactive)
(let ((n 0)
(ans))
(goto-char (point-min))
(while (re-search-forward "\\(^[0-9]+\\.\\)[^(]+[()]\\([a-hA-H]+\\)[()]" nil t)
(if (> n 0)
(save-excursion
(save-match-data
(goto-char (match-beginning 0))
(insert (format "Answer:%s \n" ans)))))
(setq ans (match-string 2))
(replace-match "" nil nil nil 2)
(setq n (1+ n)))))
如果比较有规律的话,录制一个宏好像都能解决了。
思路:C-s 搜索(,M-D 删除括号内的内容,然后C-s往下搜索C,找到以后C-n 往下走一行,输入Answer:,C-y粘贴上面删除的内容。 以此重复。
请问这是什么意思,到这里不明白了。到这应该要找到下一题开头也就是1. 2. 3.之类的
就是再按C-s 往前搜索最后一行特有的内容,我这里假设你最后一行是C。具体要看你的文件是什么规律。
特征是每题开头都是1. 2. 之类的,数字(有多位数)和点
我这里只能给你一个思路,具体还得你去操作试试看。这类问题,论坛之前有讨论过,你可以搜索一下。或者可以参考我之前整理的这个文章,里面多种方法都可以实现,我觉得宏是比较简单的方法。
我简单测试了一下,宏是可行的。