help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

file filtering


From: Peter Tury
Subject: file filtering
Date: Tue, 30 Jan 2007 15:34:48 GMT
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.92 (windows-nt)

Hi,

I would like to write an emacs lisp script what (filters +) modifies a
file logically in the following way:

* processes the file content line by line

* if line corresponds to a given regexp, then replaces the line by
  something built up from found regexp-parts (\1...)

* otherwise deletes the line

I would like to use this script similarly to grep: so emacs would run
in the backgroup (using --script initial option at Emacs invocation).

For this I am looking for some functionalities/functions what I don't
know:

* how to read a file without loading the whole file into memory
  (i.e. e.g. without loading it into a buffer)

E.g. I thought of a solution when I would read from the file only
strings what correspond to a given regexp. Something like
(insert-file-contents filename regexp). (In the "simpliest" case
regexp would be "^.*$".) Is this possible?

Then, the second step would be to replace the just inserted text, so
something like the following would be even better
(insert-file-contents filename regexp replace-match-first-arg): this
would find the regexp in filename, replace the found string according
to replace-match (in memory) and insert only the result into the buffer. 

Then (after a while loop what processes the whole file), the third
step would be to write the result into a new file, so the best would
be something like this :-) (append-to-file to-filename from-filename
regexp-to-read replace-match-first-arg-to-append)

I think I could create these functions if I would know how to read a
portion (not fixed number of chars!) of a file...

My problem is this: if I work on buffers (instead of files), I have to
create two buffers: one that corresponds to the original file and one
that corresponds to the result file -- or otherwise I have to delete
those portions of the first buffer what didn't matched by the regexp
searches -- and I don't know how to do it simply :-( Or using two
buffers (strings??) (and storing the two files in them) for such a
task isn't an ugly solution?

How to solve this task in the simpliest way?

Thanks,
P


reply via email to

[Prev in Thread] Current Thread [Next in Thread]