In Python würde ich Folgendes tun, um eine Datei Zeile für Zeile zu verarbeiten:
with open(infile) as f:
for line in f:
process(line)
Beim Versuch, nachzuschlagen, wie man dasselbe in elisp macht (mit Puffern anstelle von Dateien), fand ich keinen offensichtlichen Weg.
(Am Ende möchte ich zwei geordnete Datenstrukturen von Zeilen haben, von denen eine mit allen Zeilen übereinstimmt, die mit einem regulären Ausdruck übereinstimmen, und die andere diejenigen enthält, die nicht übereinstimmen.)
(let ((start (point))) (goto-char (point-max)) (while (> (point) start) ... (forward-line -1)))
?start
undend
vorhandene Variablen , die die Region begrenzen , auf die wir arbeiten wollen.Ich kenne keinen idiomatischen Weg, aber ich habe mir Folgendes ausgedacht:
quelle
Ich denke, das Folgende ist so idiomatisch wie es nur geht:
BEARBEITEN: Hier ist eine andere Lösung mit
loop
anstelle vondolist
und klassifiziert die Zeilen auch danach, ob sie mit Ihrem regulären Ausdruck übereinstimmen oder nicht:Wenn Sie beispielsweise eine Variable für die Ausgabe dieser Funktion festlegen
(setq x (loop ...))
, wird die gewünschte Liste der übereinstimmenden Zeilen in gefunden(car x)
, wobei die Liste der nicht übereinstimmenden Zeilen angezeigt wird(cdr x)
.quelle