On Fri, 23 Jan 2009, Andersson, Jafet wrote:

Hi all,

I want to modify a large number of text files (ca 4000) by replacing a
value found on a particular line in them with a value from an R object.

For a single file I would normally use:
        con<-file ("foo.txt", open="r+")
        content<-readLines(con)
        content[n]<-"test"
        writeLines(content,con)
        close(con)


If you know 'n' before opening the connection or can easily figure it out using the system's grep command (on your linux side), you would probably be best off using two calls to the system() function along with your system's head, cat, and tail functions to copy the parts you do not alter to a temp file. Using pipe() with the system's head and tail commands you pick off the line you modify and cat() to append it in between the system() call that copies what preceeds it and and the call that copies what succeeds it. Once the temp file is complete, you replace the orignal with it.

HTH,

Chuck


For repeating this for several files I can write a for loop around this.
However, my problem with this is that it is rather slow. I am therefore
wondering if there is any other way to write to multiple connections in
a similar way as one can e.g. write to a large number of rows in a
matrix simultaneously?

(Note that seek() is not so practical for me since the number of bytes
before the specific line varies between the files, therefore I use
reanLines() and match the right line instead.)

My Systems:
OS: Windows Server 2003 & Linux Red Hat (interchangeably)
R version: 2.7.2

Thanks for any suggestions!

ooo
Jafet Andersson
Eawag - The Swiss Federal Institute of Aquatic Science and Technology
Ueberlandstrasse 133
P.O. Box 611
CH-8600 Duebendorf
Switzerland
Phone: +41 (0)44 823 5358
Fax:     +41 (0)44 823 5028
http://www.eawag.ch/index_EN

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Charles C. Berry                            (858) 534-2098
                                            Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to