이제 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{
줄에 있는 모든 항목 앞에 문자열을 삽입하고 끝에 추가합니다 }
.
물론 이 두 부분에만 적용되는 것은 아니다. 기본적으로 각 행의 선행 숫자를 곱합니다.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, 더 큰 숫자가 허용되더라도 첫 번째 대답 앞에는 빈 줄이 없으며 어떤 줄도 공백으로 시작하거나 끝날 수 없습니다.
각 질문/답변 블록시험.txt13줄로 구성되어야 함(후행 공백 줄을 포함할 필요가 없는 마지막 항목은 제외).
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