En Python, haría lo siguiente para procesar un archivo línea por línea:
with open(infile) as f:
for line in f:
process(line)
Intentando buscar cómo hacer lo mismo en elisp (con buffers en lugar de archivos), no encontré ninguna manera obvia.
(Con lo que quiero terminar es con dos estructuras de datos ordenadas de líneas, una con todas las líneas que coinciden con una expresión regular, y la otra con las que no coinciden).
(let ((start (point))) (goto-char (point-max)) (while (> (point) start) ... (forward-line -1)))
:?start
yend
son variables existentes que delimitan la región en la que queremos operar.No conozco ninguna forma idiomática, pero se me ocurrió esto:
fuente
Creo que lo siguiente es tan idiomático como puede ser:
EDITAR: Aquí hay otra solución
loop
en lugar dedolist
, y que también clasifica las líneas según si coinciden o no con su expresión regular:Si establece una variable en la salida de esta función, por ejemplo
(setq x (loop ...))
, la lista deseada de líneas coincidentes se encontrará en(car x)
, con la lista de líneas no coincidentes(cdr x)
.fuente