
Diese Frage ist eine Erweiterung dieser Frage überAuflistungsfragen zu Verzeichnissen. Ich habe das Problem, dass ich den ursprünglichen Textabschnitt verstehen muss.
Aktueller Output
wo Sie sehen, dass die zweite Frage keinen Sinn ergibt. Sie wurde in diesubsection
Takayasu-Arteriitisim Verzeichnis Rheumatologie:
\subsection{Takayasu arteritis}
\begin{question}
{You get a patient.
What do you notice first in this patient?}
Absence of peripheral pulse.
\end{question}
Lorem ipsum.
\begin{question}
{What was the first Takayasu case?}
Young woman in Asia with red vessels in the eye.
So special eye diagnosis done.
Affects eye.
\end{question}
wobei die aktuelle Leistung durch diese hervorragendeCode
\section{Rheumatology}
\begin{question}
{You get a patient.
What do you notice first in this patient?}
Absence of peripheral pulse.
\end{question}
\begin{question}
{What was the first Takayasu case?}
Young woman in Asia with red vessels in the eye.
So special eye diagnosis done.
Affects eye.
\end{question}
aber ich hätte es gerne
\section{Rheumatology}
\subsection{Takayasu arteritis}
\begin{question}
{You get a patient.
What do you notice first in this patient?}
Absence of peripheral pulse.
\end{question}
\begin{question}
{What was the first Takayasu case?}
Young woman in Asia with red vessels in the eye.
So special eye diagnosis done.
Affects eye.
\end{question}
Mein Vorschlag besteht darin, Unterabschnitte einzufügen, wenn der Unterabschnitt Fragen enthält.
Mein Pseudocode
Look for the environment \begin{question}...\end{question}.
See the subsection of the question (it locates above the question).
If there is no subsection, leave blank.
If there are many questions within one subsection, put only one subsection.
Terdons Code
#!/usr/bin/env bash
## avoid errors if a directory has no *tex files
shopt -s nullglob
directories=("Cardiology" "Rheumatology" "Surgery");
## Change this to set whichever options you want.
printf "%s\n%s\n" "\documentclass{YOURCLASS}" "\begin{document}"
for directory in ${directories[@]}
do
## Reset the counter, avoid empty sections.
c=0;
for file in "$directory"/*tex
do
let c++
[ "$c" -eq 1 ] && printf "\n%s\n" "\section{$directory}"
## Extract the wanted lines
perl -lne '$a=1 && print "" if /\\begin{question}/;
print if $a==1;
$a=0 if /\\end{question}/;' "$file"
echo ""
done
done
echo "\end{document}"
wo ich denke, die Logik dieser Zeilen sollte geändert werden
## Extract the wanted lines
perl -lne '$a=1 && print "" if /\\begin{question}/;
print if $a==1;
$a=0 if /\\end{question}/;' "$file"
echo ""
das einen regulären Ausdruck verwendet, um alle Fragen in einer Datei zu finden UND die Unterabschnitte der Fragen ignoriert.
Beispiel für Daten(etwas anders als im letzten Fall!)
\subsection{Takayasu arteritis}
\begin{question}
{You get a patient.
What do you notice first in this patient?}
Absence of peripheral pulse.
\end{question}
\begin{question}
{What was the first Takayasu case?}
Young woman in Asia with red vessels in the eye.
So special eye diagnosis done.
Affects eye.
\end{question}
Fever of unknown origin can be used when you do not know what is causing the disease.
% Show cases in MedScape and ask class.
Aneurysms.
\subsubsection{Treatment}
\begin{question}
{What you should always include in Takayasu treatment?
What are the symptoms?}
Blood pressure.
Aneurysms which will burst without treatment.
So blood pressure decreasing drugs like beta blockers along in combination with other drugs.
\end{question}
\begin{question}
{When is the checkup of the Takayasu arteritis?}
Only once per year.
You could expect every month like normally in this kind of diseases.
But only once per year.
\end{question}
wo Sie Unterabschnitte in der Anwendung ignorieren können.
Wie kann man den Pseudocode schreiben?
Fehler in Terdons Code vom 14.10.2014 gefunden
Beispiel für Daten, die den Fehler verursachen
\subsection{3}
A 55 y.o male says that for the last year ...
\begin{question}
{What is the pathogenetic mechanism of his complains?}
\end{question}
was mit Terdons Code analysiert genau das gleiche Ergebnis liefert, was falsch ist, da der SatzEin 55-Jähriger.sollte im Endergebnis nicht mehr vorhanden sein. Wenn zwischen Unterkapitel und Fließtext ein Enter steht, dann korrekte Ausgabe. Davon kann allerdings nicht ausgegangen werden.
Die Ursache für diesen Fehler sind die Windows-Symbole, verschobenHier.
Antwort1
Ich wollte meinen ursprünglichen Code erweitern, aber er ist an einem Punkt angelangt, an dem es viel einfacher ist, alles direkt in Perl neu zu implementieren:
#!/usr/bin/env perl
## This is the path to the target directories
my $path="/Users/Masi/Dropbox/";
## The target directories
my @directories=("Cardiology","Rheumatology","Surgery");
## Iterate over the directories
foreach my $dir (@directories) {
my $dd=0;
## Read the current directory
opendir (my $DIR, "$path/$dir");
## Find all files in this directory
while (my $file = readdir($DIR)) {
## Reset the counter
my $c=0;
## Skip any files that aren't .tex
next unless $file =~ /\.tex$/;
## Open the file
open(my $fh,"$path/$dir/$file");
while (<$fh>) {
## Get the subsection. $_ is the current line.
$sub="$_" and $n=0 if /\\subsection{/;
## If this line is a question
if (/\\begin{question}/) {
## If this counter is 0, this is the first file
## of this directory, so print the section
## Print the section name
if ($dd==0) {
print "\\section{$dir}\n\n";
$dd++;
}
## If this counter is 0, this is the first question
## of this subsection, so print the subsection line
print "$sub\n" if $n==0;
$n++;
## Increment the counter, we want these lines
$c++;
## And print
print;
}
else {
## Print lines if the counter is 1
print if $c==1;
## reset the counter to 0
print "\n" and $c=0 if /\\end{question}/;
}
}
print "\n";
}
}
Beachten Sie, dass hierdurch Unterunterabschnitte ignoriert werden. Es wäre jedoch leicht, diese so zu ändern, dass sie eingeschlossen werden.
Antwort2
Erweiterung oder Verbesserung des Terdon-Codesbasierend auf einer gewissen Logik in diesemAntwort
#!/usr/bin/env perl
## This is the path to the target directories
my $path="/Users/Masi/Dropbox/";
chdir $path or die "cannot chdir '$path'";
## Iterate over the directories
foreach my $dir (
"Cardiology", "Pathophysiology", "Patology and Biopsy", "Physiology",
"Propedeutics", "Radiology", "Rheumatology", "Surgery"
)
{
my $dd=0;
## Read the current directory
opendir my $DIR, $dir or die "cannot opendir '$dir'";
## Find all files in this directory
while (my $file = readdir($DIR)) {
## Reset the counter
my $c=0;
## Skip any files that aren't .tex
next unless $file =~ /\.tex$/;
## Open the file
open(my $fh,"$path/$dir/$file");
while (<$fh>) {
## Get the subsection. $_ is the current line.
$sub="$_" and $n=0 if /\\subsection{/;
## If this line is a question
if (/\\begin{question}/) {
## If this counter is 0, this is the first file
## of this directory, so print the section
## Print the section name
if ($dd==0) {
print "\\section{$dir}\n\n";
$dd++;
}
## If this counter is 0, this is the first question
## of this subsection, so print the subsection line
print "$sub\n" if $n==0;
$n++;
## Increment the counter, we want these lines
$c++;
## And print
print;
}
else {
## Print lines if the counter is 1
print if $c==1;
## reset the counter to 0
print "\n" and $c=0 if /\\end{question}/;
}
}
print "\n";
}
closedir $DIR or die "cannot closedir '$dir'";
}
wo ich etwas Fehlermanagement hinzugefügt habe.