我现在正在扩展我自己对 MCQ 的回答如何将这些段落SED转为MCQ格式?。
file.txt中的数据
1 c
2 a
exam.tex 中的数据
\item
Which of the following lorem ipsun are the best playstation games you have played?
A Pattman
B Pokemon
C Lorem
D Ipsun
E Heillui
\item
Which of the following lorem ipsun are the best playstation games you have played?
A Pattman
B Pokemon
C Lorem
D Ipsun
E Heillui
想要的输出由答案中的粗体部分表示文件.txt
\item
Which of the following lorem ipsun are the best playstation games you have played?
A Pattman
B Pokemon
\textbf{C Lorem}
D Ipsun
E Heillui
\item
Which of the following lorem ipsun are the best playstation games you have played?
\textbf{A Pattman}
B Pokemon
C Lorem
D Ipsun
E Heillui
伪代码
- Perl 段落模式下的 for 循环 \item
- for 按列表中的计数循环每个段落中的空行 (a=1, b=2, c=3, d=4, e=5)
- 将 \textbf 应用于行的开头;和 } 到行尾
- 跳出当前段落
- for 按列表中的计数循环每个段落中的空行 (a=1, b=2, c=3, d=4, e=5)
- 结尾
使用 Python-Perl 的伪代码
for item in items
perl -00pe 's/\\item\n.*\n{$item}^/\textbf{/;' file
perl -00pe 's/\\item\n.*\n{$item}$/}/;' file
end
我不喜欢在单独的命令中处理开头和结尾。
如何通过 Perl/SED/Python 将答案应用于 MCQ?
答案1
{ printf '[13*%d-n[bs]pc]s%c\n' 9 a 7 b 5 c 3 d 1 e
tr -s ' \n' lx <file.txt; } | dc |
sed -f- -eb -e:s -e's/.*/\\textbf{&}/' exam.txt
它使用dc
反向抛光符号计算器生成一个sed
如下所示的脚本:
8bs
17bs
...然后与sed
在命令行上输入的脚本连接起来,从而得到每个行号不是包含在生成的脚本中以进行b
远程处理,并且对于那些是include 将字符串\textbf{
插入到行中存在的任何内容之前并附}
加到其尾部。
当然,它不仅仅适用于这两个部分。基本上它乘以每行的前导数字file.txt
除以 13,然后分别从乘积 1、3、5、7、9 中减去 e、d、c、b、a 中的任意一个,得到目标行号列表。
无论如何,sed
最后要做的就是对分支之前不编辑的每一行执行默认打印,或者对字符串进行一次替换。tr
并且dc
都是非常快速实用程序,它们处理几乎所有的预处理。
这种方法可能的优点:
无需在两个文件之间进行比较。
根本不需要正则表达式匹配。
虽然正确,
sed
但 的处理可能会从初始附加过滤器中稍微受益,以防止它尝试匹配每一个与列表中的行号相对应的行号,例如:... | sed -e'/^[ABCDE] /!b' -f- ...
答案在文件.txt不需要按任何特定顺序,甚至不需要完全代表其中的每个问题考试.txt。
可能的缺点:
每个答复信文件.txt一定是小写的。
- 用于
tr -s '[:upper:] \n' \[:lower:]lx
处理任一/或。
- 用于
答案编号与答案字母之间以及每个答案之间至少需要一个中间空格和中间换行符文件.txt,尽管允许任何更大的数字,但在第一个答案之前找不到前导空白行,并且任何行都不能以空格开头或结尾。
每个问题/答案块考试.txt必须由 13 行组成(最后一个除外,它不需要包含尾随空白行)。
dc
这取决于所编写的一两个 GNU扩展。这是一个更便携的版本:
{ printf '[13*%d-p[s]pc]s%c\n' 9 a 7 b 5 c 3 d 1 e
tr -s ' \n' lx <file.txt;}| dc | paste -db - -|
sed -f- -eb -e:s -e's/.*/\\textbf{&}/' exam.txt
...不过,无论你怎么写:
\item
Which of the following lorem ipsun are the best playstation games you have played?
A Pattman
B Pokemon
\textbf{C Lorem}
D Ipsun
E Heillui
\item
Which of the following lorem ipsun are the best playstation games you have played?
\textbf{A Pattman}
B Pokemon
C Lorem
D Ipsun
E Heillui