Der Inhalt einer externen Datei soll zur weiteren Verarbeitung zeilenweise in einer expl3-Sequenz gespeichert werden. Dies kann zwar mit dem folgenden Code geschehen, doch stört mich daran, dass
Geht das noch besser? Open in Online-Editor
\documentclass{article} \usepackage{expl3} \usepackage{xparse} \begin{filecontents*}{Datei} Mueller Meyer Schulze Schmidt machen allen Unsinn mit \end{filecontents*} \ExplSyntaxOn \ior_new:N \l_datei_stream \seq_new:N \l_dateiinhalt_seq \cs_new:Npn \lies_dateiinhalt:n #1 { \ior_open:Nn \l_datei_stream {#1} \ior_map_inline:Nn \l_datei_stream { \seq_put_right:Nn \l_dateiinhalt_seq {##1} } \ior_close:N \l_datei_stream \seq_use:Nn \l_dateiinhalt_seq {\slash} } \NewDocumentCommand \Dateiinhalt {m} { \lies_dateiinhalt:n {#1} } \ExplSyntaxOff \begin{document} \Dateiinhalt{Datei} \end{document} |
Ich finde eigentlich nicht, dass Du die experimentelle Funktion unbedingt vermeiden musst, vor allem, wenn man folgende Hinweise aus l3candiates bedenkt:
Die Funktionen können sich zwar ändern, aber nicht notwendigerweise in drastischer Form. Wenn man mit expl3 arbeitet, muss man so oder so darauf gefasst sein, dass es Änderungen gibt. Ich musste meine Pakete schon ein, zwei mal updaten wegen einer Änderung am Kernel, die nicht aus dem candidates-teil waren. Auf der anderen Seite hilft eine konkrete Anwendung, um die Funktionen zu »stabilisieren«, jedenfalls, wenn man ggf dem L3-Team Feedback gibt. Das mit dem Leerzeichen am Ende lässt sich leicht lösen: Ich würde die Sequenz zu Beginn der Funktion leeren. (Falls die Funktion mehrmals verwendet wird.) Um den Konventionen zu folgen wie sie in expl3.pdf Abschnitt 3.2 diskutiert werden, habe ich Deine Funktionen und Variablen dem Module cletus zugeordnet. Open in Online-Editor
\documentclass{article} \usepackage{expl3} \usepackage{xparse} % \usepackage{filecontents} \begin{filecontents*}{Datei} Mueller \textbf{Meyer} Schulze Schmidt machen allen Unsinn mit \end{filecontents*} \ExplSyntaxOn \ior_new:N \l_cletus_datei_stream \seq_new:N \l_cletus_dateiinhalt_seq \cs_new:Npn \cletus_lies_dateiinhalt:n #1 { \seq_clear:N \l_cletus_dateiinhalt_seq \ior_open:Nn \l_cletus_datei_stream {#1} \ior_map_inline:Nn \l_cletus_datei_stream { \seq_put_right:Nx \l_cletus_dateiinhalt_seq { \tl_trim_spaces:n {##1} } } \ior_close:N \l_cletus_datei_stream \seq_use:Nn \l_cletus_dateiinhalt_seq {\slash} % Debug-Info - wieder entfernen: \seq_show:N \l_cletus_dateiinhalt_seq } \NewDocumentCommand \Dateiinhalt {m} { \cletus_lies_dateiinhalt:n {#1} } \ExplSyntaxOff \begin{document} \Dateiinhalt{Datei} \end{document} Das log: Open in Online-Editor
The sequence \l_cletus_dateiinhalt_seq contains the items (without outer braces): > {Mueller} > {\textbf {Meyer}} > {Schulze} > {Schmidt} > {machen allen Unsinn mit}. beantwortet 28 Mai '16, 22:24 cgnieder |
Ganz ohne experimentelle Funktionen, ohne störende Leerzeichen am Ende und ohne vollständige Expansion des Dateiinhalts. So können auch Makros gelesen werden. Open in Online-Editor
\documentclass{article} \usepackage{expl3} \usepackage{xparse} \begin{filecontents*}{Datei} Mueller Meyer \textbf{Schulze} Schmidt machen allen Unsinn mit \end{filecontents*} \ExplSyntaxOn \ior_new:N \l_datei_stream \seq_new:N \l_dateiinhalt_seq \cs_new:Npn \lies_dateiinhalt:n #1 { \ior_open:Nn \l_datei_stream {#1} \bool_until_do:nn { \ior_if_eof_p:N \l_datei_stream } { \ior_get:NN \l_datei_stream \l_tmpa_tl \tl_trim_spaces:N \l_tmpa_tl \seq_put_right:NV \l_dateiinhalt_seq \l_tmpa_tl } \ior_close:N \l_datei_stream \seq_use:Nn \l_dateiinhalt_seq {\slash} } \NewDocumentCommand \Dateiinhalt {m} { \lies_dateiinhalt:n {#1} } \ExplSyntaxOff \begin{document} \Dateiinhalt{Datei} \end{document} beantwortet 28 Mai '16, 11:29 Henri „vor allem ohne vollständige Expansion“ – das ist ja weder im OP noch in meinem Kommentar ein Problem. Interface3 zu
(28 Mai '16, 11:33)
cgnieder
Der Vorschlag ist interessant, scheint aber den Schönheitsfehler zu haben, dass am Ende noch eine leere Zeile eingelesen wird, wie man am abschließenden Schrägstrich erkennen kann. Es ist also noch etwas Nacharbeit nötig, wenn man das vermeiden will.
(28 Mai '16, 19:09)
Cletus
Clemens, was ist denn ein OP? Operationssaal?
(28 Mai '16, 19:11)
Cletus
Originalpost, in diesem Fall Deine Frage oben. Ist eigentlich eine englische Abkürzung und kann sich sowohl auf die Frage als auch den/die Fragesteller/in beziehen.
(28 Mai '16, 19:51)
cgnieder
Ergebnis 5 von 6
show 1 more comments
|