No Python, eu faria o seguinte para processar um arquivo linha por linha:
with open(infile) as f:
for line in f:
process(line)
Tentando pesquisar como fazer o mesmo no elisp (com buffers em vez de arquivos), não encontrei uma maneira óbvia.
(Quero terminar com duas estruturas de dados ordenadas de linhas, uma com todas as linhas correspondentes a uma expressão regular, a outra contendo aquelas que não corresponderam.)
(let ((start (point))) (goto-char (point-max)) (while (> (point) start) ... (forward-line -1)))
:?start
eend
são variáveis existentes que delimitam a região na qual queremos operar.Não conheço nenhuma maneira idiomática, mas vim com isso:
fonte
Eu acho que o seguinte é o mais idiomático possível:
EDIT: Aqui está outra solução
loop
no lugar dedolist
, e que também classifica as linhas de acordo com a correspondência ou não com sua expressão regular:Se você definir uma variável para a saída desta função, digamos
(setq x (loop ...))
, a lista desejada de linhas correspondentes será encontrada(car x)
, com a lista de linhas não correspondentes(cdr x)
.fonte