今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 ループ
- 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{
行内のすべての項目の前に文字列を挿入して末尾に追加します}
。
もちろん、これら2つの部分にのみ適用されるわけではありません。デフォルトでは、各行の先行番号を掛けます。file.txt
13 で割った後、積 1、3、5、7、9 からそれぞれ e、d、c、b、a の 1 つを減算して、ターゲット行番号のリストを取得します。
とにかく、sed
最後にやりたいことは、四半期前に編集していないすべての行に対してデフォルトの印刷を実行するか、文字列に対して単一の置換を実行することです。tr
そしてdc
非常にクイックユーティリティでほぼすべての前処理を処理します。
このアプローチの可能な利点は次のとおりです。
両方のファイルを比較する必要はありません。
正規表現の一致はまったく必要ありません。
正確だが
sed
一致試行を防ぐために、初期追加のフィルタを使用すると、処理にいくつかの利点がある可能性があります。すべてリストの行番号に対応する行番号です。たとえば、次のようになります。... | sed -e'/^[ABCDE] /!b' -f- ...
正解はファイル.txt特定の順序に従う必要もなく、各問題を完全に表す必要もありません。テスト.txt。
可能な欠点:
各返信の手紙ファイル.txt小文字でなければなりません。
- 処理のために
tr -s '[:upper:] \n' \[:lower:]lx
/または。
- 処理のために
解答番号と解答文字の間、および各解答の間に少なくとも1つのスペースと改行文字が必要です。ファイル.txt、より大きな数字が許可されていても、最初の答えの前には空白行がなく、空白で始まったり終わったりすることはできません。
各質問/回答ブロックテスト.txt13行で構成する必要があります(末尾の空白行を含める必要のない最後の項目は除く)。
dc
これは、作成された1つまたは2つの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