En Python, je ferais ce qui suit pour traiter un fichier ligne par ligne:
with open(infile) as f:
for line in f:
process(line)
En essayant de chercher comment faire la même chose dans elisp (avec des tampons au lieu de fichiers), je n'ai trouvé aucun moyen évident.
(Ce que je veux finir, c'est deux infrastructures de données ordonnées de lignes, l'une avec toutes les lignes correspondant à une expression régulière, l'autre contenant celles qui ne correspondent pas.)
(let ((start (point))) (goto-char (point-max)) (while (> (point) start) ... (forward-line -1)))
:?start
etend
sont des variables existantes qui délimitent la région sur laquelle nous voulons opérer.Je ne connais aucun moyen idiomatique mais je suis venu avec ceci:
la source
Je pense que ce qui suit est aussi idiomatique que possible:
EDIT: Voici une autre solution avec
loop
à la place dedolist
, et qui classe également les lignes selon qu'elles correspondent ou non à votre expression régulière:Si vous définissez une variable sur la sortie de cette fonction, par exemple
(setq x (loop ...))
, la liste souhaitée des lignes correspondantes se trouvera dans(car x)
, la liste des lignes non correspondantes étant(cdr x)
.la source