Skip to content

how to handle no lines in input with pipe()

4 messages · Andrew Yee, Brian Ripley, Jeff Newmiller

#
This has to do with using pipe() and grep and read.csv()

I have a .csv file that I grep using pipe() and read.csv() as follows:

read.csv(pipe('grep foo bar.csv'))

However, is there a way to have this command run when for example,
there is no "foo" text in the bar.csv file?  I get an error message
(appropriately):

Error in read.table(file = file, header = header, sep = sep, quote = quote,  :
  no lines available in input

Is there a way to "inspect" the output of pipe before passing it on to
read.csv()?

Thanks,
Andrew
#
On Mon, 4 Apr 2011, Andrew Yee wrote:

            
You have to read from a pipe to 'inspect' it.  So

tmp <- readLines(pipe('grep foo bar.csv'))
if(!length(tmp)) do something else
else {
   res <- read.csv(con <- textConnection(tmp))
   close(con)
}

OTOH, unless the file is enormous you could simply read it into R and 
use grep(value = TRUE) on the character vector.

  
    
7 days later
#
Thank you very much for your suggestion...that works perfectly.

Thanks,
Andrew
On Mon, Apr 4, 2011 at 5:46 PM, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote: