Why does File.exists? not support regexp? It would be veryhandfull?

K

kazaam

Hi,
if I wanna check if a file exists like fglrx.i386.8.40.3.ko why is File.exists? not able to handle regexp to check this like:

system('rm fglrx*') if File.exists?(/^fglrx.+/)

--> ./test.rb:4:in `exists?': can't convert Regexp into String (TypeError)
 
D

Daniel Berger

Hi,
if I wanna check if a file exists like fglrx.i386.8.40.3.ko why is File.exists? not able to handle regexp to check this like:

system('rm fglrx*') if File.exists?(/^fglrx.+/)

--> ./test.rb:4:in `exists?': can't convert Regexp into String (TypeError)

Dir["fglrx*"].each{ |file| File.delete(file) }

Regards,

Dan
 
K

kazaam

Dir["fglrx*"].each{ |file| File.delete(file) }

that's pretty much the same like: system('rm -f fglrx*') but I'm asking why one doesn't allow regexpr into File.exists?
 
D

Daniel Berger

Dir["fglrx*"].each{ |file| File.delete(file) }

that's pretty much the same like: system('rm -f fglrx*') but I'm asking why one doesn't allow regexpr into File.exists?

Probably because most people wouldn't find it intuitive, there's
already easy alternatives, and there doesn't seem to be any desire for
it among the Ruby community in general. You're the first person to
request it that I've seen.
From a development point of view, it's not only more maintenance, but
also a slipperly slope towards having to review every other boolean
File method.

Regards,

Dan
 
G

Gary Wright

Dir["fglrx*"].each{ |file| File.delete(file) }
that's pretty much the same like: system('rm -f fglrx*') but I'm
asking why one doesn't allow regexpr into File.exists?

I would guess it is because file name pattern matching
is subtly different from string pattern matching. In
particular you have the problem of directory hierarchies
and how to handle the separator character (typically '/').
The common file pattern syntax is also *not* the same
as general regular expressions.

Gary Wright
 
J

Joel VanderWerf

Gary said:
Dir["fglrx*"].each{ |file| File.delete(file) }
that's pretty much the same like: system('rm -f fglrx*') but I'm
asking why one doesn't allow regexpr into File.exists?

I would guess it is because file name pattern matching
is subtly different from string pattern matching. In
particular you have the problem of directory hierarchies
and how to handle the separator character (typically '/').
The common file pattern syntax is also *not* the same
as general regular expressions.

The slocate(1) program does have a -r option for searching file paths
with a regex, so there is some precedent.
 
R

rio4ruby

Hi,
if I wanna check if a file exists like fglrx.i386.8.40.3.ko why is File.exists? not able to handle regexp to check this like:

system('rm fglrx*') if File.exists?(/^fglrx.+/)

--> ./test.rb:4:in `exists?': can't convert Regexp into String (TypeError)

I agree that file matching via regular expressions is very convenient
in certain situations that are not handled by globs. You might want to
look at Rio (http://rio.rubyforge.org).
 
L

Lionel Bouton

Joel VanderWerf wrote the following on 04.09.2007 23:47 :
Gary said:
On Wed, 5 Sep 2007 00:52:57 +0900

Dir["fglrx*"].each{ |file| File.delete(file) }

that's pretty much the same like: system('rm -f fglrx*') but I'm
asking why one doesn't allow regexpr into File.exists?

I would guess it is because file name pattern matching
is subtly different from string pattern matching. In
particular you have the problem of directory hierarchies
and how to handle the separator character (typically '/').
The common file pattern syntax is also *not* the same
as general regular expressions.

The slocate(1) program does have a -r option for searching file paths
with a regex, so there is some precedent.
slocate uses it's own database, not direct file access. File.exists?
uses a system call directly. Using regexes would need to list all files
that could match (a directory or the whole virtual filesystem depending
on what you are matching with: a filename in a given directory or a
path). This is far from a common need and in the general case far too
slow: developpers are better off coding the regex matching code
themselves and optimize it by listing the smallest subset of filepaths
the OS can give them before they filter with a regex (which is trivial
to do in Ruby anyway)...

Lionel
 
J

Joel VanderWerf

Lionel said:
Joel VanderWerf wrote the following on 04.09.2007 23:47 :
Gary said:
On Sep 4, 2007, at 12:00 PM, kazaam wrote:
On Wed, 5 Sep 2007 00:52:57 +0900

Dir["fglrx*"].each{ |file| File.delete(file) }

that's pretty much the same like: system('rm -f fglrx*') but I'm
asking why one doesn't allow regexpr into File.exists?
I would guess it is because file name pattern matching
is subtly different from string pattern matching. In
particular you have the problem of directory hierarchies
and how to handle the separator character (typically '/').
The common file pattern syntax is also *not* the same
as general regular expressions.
The slocate(1) program does have a -r option for searching file paths
with a regex, so there is some precedent.
slocate uses it's own database, not direct file access. File.exists?
uses a system call directly. Using regexes would need to list all files
that could match (a directory or the whole virtual filesystem depending
on what you are matching with: a filename in a given directory or a
path). This is far from a common need and in the general case far too
slow: developpers are better off coding the regex matching code
themselves and optimize it by listing the smallest subset of filepaths
the OS can give them before they filter with a regex (which is trivial
to do in Ruby anyway)...

Well, there's "find -regex", too, but I agree that regex matching is
probably better for narrowing down a globbed search.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,140
Latest member
SweetcalmCBDreview
Top