[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

what is best idiom to remove file extension

bwv549

2/23/2009 10:36:00 PM

What is the most concise, bulletproof idiom for removing the file
extension from a file? Maybe I've missed something obvious that
everyone else uses...

Here's what I usually do:

This is what I usually use if I want bulletproof:
filename.sub(/#{Regexp.escape(File.extname(filename))}$/, '')

I use something like this when I want something quick:
filename.sub(/\.\w$/,'')

One could imagine doing something like this, but it is comical how
much code it takes:
File.join( File.dirname(filename), File.basename(filename,
File.extname(filename)))

What do you use for this (seemingly) trivial task?

Thanks,
John
9 Answers

Daniel Berger

2/23/2009 11:02:00 PM

0



On Feb 23, 3:39=A0pm, bwv549 <jtpri...@gmail.com> wrote:
> What is the most concise, bulletproof idiom for removing the file
> extension from a file? =A0Maybe I've missed something obvious that
> everyone else uses...
>
> Here's what I usually do:
>
> This is what I usually use if I want bulletproof:
> =A0 filename.sub(/#{Regexp.escape(File.extname(filename))}$/, '')
>
> I use something like this when I want something quick:
> =A0 filename.sub(/\.\w$/,'')
>
> One could imagine doing something like this, but it is comical how
> much code it takes:
> =A0 File.join( File.dirname(filename), File.basename(filename,
> File.extname(filename)))

Don't forget about the 2nd argument to File.basename:

File.basename(file, File.extname(file))

If you need to guarantee the full path:

File.expand_path(File.basename(file, File.extname(file))

Regards,

Dan

7stud --

2/23/2009 11:38:00 PM

0

bwv549 wrote:
> What is the most concise, bulletproof idiom for removing the file
> extension from a file? Maybe I've missed something obvious that
> everyone else uses...
>
> Here's what I usually do:
>
> This is what I usually use if I want bulletproof:
> filename.sub(/#{Regexp.escape(File.extname(filename))}$/, '')
>

How about:

name = fname.chomp(File.extname(fname) )

--
Posted via http://www.ruby-....

7stud --

2/23/2009 11:52:00 PM

0

7stud -- wrote:
>
> How about:
>
> name = fname.chomp(File.extname(fname) )

name = fname.chomp(File.extname(fname) ) <------

name = fname[/.*(?=\..+$)/] <--------------
--
Posted via http://www.ruby-....

bwv549

2/24/2009 12:09:00 AM

0

All great answers - much better than what I was doing before.

To summarize then...

full pathname with no extension:
File.expand_path(File.basename(fname, File.extname(fname))

easy to remember and read:
fname.chomp(File.extname(fname) )

shortest:
fname[/.*(?=\..+$)/]

Thanks all!

Michael Fellinger

2/24/2009 6:02:00 AM

0

On Tue, Feb 24, 2009 at 9:09 AM, bwv549 <jtprince@gmail.com> wrote:
> All great answers - much better than what I was doing before.
>
> To summarize then...
>
> full pathname with no extension:
> =C2=A0 =C2=A0File.expand_path(File.basename(fname, File.extname(fname))
>
> easy to remember and read:
> =C2=A0 =C2=A0fname.chomp(File.extname(fname) )
>
> shortest:
> =C2=A0 =C2=A0fname[/.*(?=3D\..+$)/]

You can also use:

File.basename('foo.bar', '.*')
# "foo"

^ manveru

Jan Friedrich

2/24/2009 8:56:00 AM

0

Michael Fellinger <m.fellinger@gmail.com> wrote:

> On Tue, Feb 24, 2009 at 9:09 AM, bwv549 <jtprince@gmail.com> wrote:
> You can also use:
>
> File.basename('foo.bar', '.*')
> # "foo"
Be aware if it gets the result you want:
File.basename('foo.tar.gz', '.*')
# => "foo.tar"

However,
Jan Friedrich

Martin DeMello

2/24/2009 2:34:00 PM

0

On Tue, Feb 24, 2009 at 5:39 AM, bwv549 <jtprince@gmail.com> wrote:
> All great answers - much better than what I was doing before.
>
> To summarize then...
>
> full pathname with no extension:
> =A0 =A0File.expand_path(File.basename(fname, File.extname(fname))
>
> easy to remember and read:
> =A0 =A0fname.chomp(File.extname(fname) )
>
> shortest:
> =A0 =A0fname[/.*(?=3D\..+$)/]

Note that you've lost your robustness with that last:

irb> fname =3D '.vimrc'
=3D> ".vimrc"
irb> fname[/.*(?=3D\..+$)/]
=3D> ""
irb> fname.chomp(File.extname(fname) )
=3D> ".vimrc"

martin

-lim-

2/24/2009 3:07:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

>
> > full pathname with no extension:
> > File.expand_path(File.basename(fname, File.extname(fname))


File.basename(fname, '.*') would be shorter. It also handles file names like
".vimrc" correctly.



--
The end is here -->

bwv549

3/6/2009 5:47:00 AM

0

Another summary is due:

Shortest, rock-solid idiom for removing the extension, without
removing the preceding path:

fname.chomp(File.extname(fname))

Best idiom if you are removing the path also:

File.basename(fname, '.*')

It is unfortunate that these are so dissimilar, but both are easy to
remember and concise, so no problem. Thanks again for everyone's help
on this.