[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
- file filtering,
Peter Tury <=