Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > How to use the Dir class, search for a sub directroy

Reply
Thread Tools

How to use the Dir class, search for a sub directroy

 
 
Harry Nash
Guest
Posts: n/a
 
      03-01-2009
Good day, I am learning Ruby,and doing some experaments.
I have a bit of code that searches the header of MP3 files
in a folder to get file 1 artist name. This is a variable artist.
Now I try to search a diferent directory and see if
a sub directory has the same name. So letts say the artist
is Abba and I do have a sub folder in e:\music with ABBA
how do I use Dir class to evaluate if Abba is found. I tried
changing Abba to ABBA and still I do not get expected results.

Artist = ABBA
Dir.chdir("e:/music")
Dir["#{artist}"]

I tried a number of things here, I need a positive or negitave
return; and, how to get the return value.

OH
Is there a way to mark a post as answered?
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
badboy
Guest
Posts: n/a
 
      03-01-2009
Harry Nash schrieb:
> Good day, I am learning Ruby,and doing some experaments.
> I have a bit of code that searches the header of MP3 files
> in a folder to get file 1 artist name. This is a variable artist.
> Now I try to search a diferent directory and see if
> a sub directory has the same name. So letts say the artist
> is Abba and I do have a sub folder in e:\music with ABBA
> how do I use Dir class to evaluate if Abba is found. I tried
> changing Abba to ABBA and still I do not get expected results.
>
> Artist = ABBA
> Dir.chdir("e:/music")
> Dir["#{artist}"]
>
> I tried a number of things here, I need a positive or negitave
> return; and, how to get the return value.
>
> OH
> Is there a way to mark a post as answered?

try this:
artist = 'ABBA'
Dir.glob("*#{artist}*", File::FNM_CASEFOLD)
the * means anything before and after your search string, FNM_CASEFOLD
=> case insensitive
this could be easily found out by reading the rdoc at:
http://www.ruby-doc.org/core/classes/Dir.html#M002347
http://www.ruby-doc.org/core/classes/File.html#M002603

 
Reply With Quote
 
 
 
 
Harry Nash
Guest
Posts: n/a
 
      03-01-2009

Thanks for your reply, I had read the doc but could not get it to work
This is what I wound up doing and it does work.

Dir.chdir("e:/foldertest")
artist = 'Abba'
artist_check = Dir.glob("#{artist}", File::FNM_CASEFOLD)
puts artist_check
if "#{artist}" != "#{artist_check}"
puts "no match found"
else puts "found match"
end





badboy wrote:
> Harry Nash schrieb:
>> Dir.chdir("e:/music")
>> Dir["#{artist}"]
>>
>> I tried a number of things here, I need a positive or negitave
>> return; and, how to get the return value.
>>
>> OH
>> Is there a way to mark a post as answered?

> try this:
> artist = 'ABBA'
> Dir.glob("*#{artist}*", File::FNM_CASEFOLD)
> the * means anything before and after your search string, FNM_CASEFOLD
> => case insensitive
> this could be easily found out by reading the rdoc at:
> http://www.ruby-doc.org/core/classes/Dir.html#M002347
> http://www.ruby-doc.org/core/classes/File.html#M002603


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

 
Reply With Quote
 
badboy
Guest
Posts: n/a
 
      03-01-2009
Harry Nash schrieb:
> Thanks for your reply, I had read the doc but could not get it to work
> This is what I wound up doing and it does work.
>
> Dir.chdir("e:/foldertest")
> artist = 'Abba'
> artist_check = Dir.glob("#{artist}", File::FNM_CASEFOLD)
> puts artist_check
> if "#{artist}" != "#{artist_check}"
> puts "no match found"
> else puts "found match"
> end
>

Dir.glob returns an array, not a string, so your "if artist !=
artist_check" will fail.
also, you won't find folders/files like "abba album" with your search,
if you want this add the star ("*")
artist is already a string, so no need for "#{...}", just use artist
and at last:
if you changed the if-construct it will fail, if Dir.glob found "abba",
because your "artist" is "Abba"


 
Reply With Quote
 
Harry Nash
Guest
Posts: n/a
 
      03-01-2009

I removed the * as I only want exact match. There are only artist
folders such as ABBA acdc they do not have additional folders.
I do agree with you comment below; strange though, if I change
the folder ABBA to FBBA my code returns no match found, then
I change the name back to ABBA, I get found match. Sooo it does work,
yet if it's wrong it will then break some time. I think a different
Dir class command is needed not glob, I am trying only for
a ture or false return not the aray.

Again thanks for your input; and on Sunday too!



badboy wrote:
> Harry Nash schrieb:
>> end
>>

> Dir.glob returns an array, not a string, so your "if artist !=
> artist_check" will fail.
> also, you won't find folders/files like "abba album" with your search,
> if you want this add the star ("*")
> artist is already a string, so no need for "#{...}", just use artist
> and at last:
> if you changed the if-construct it will fail, if Dir.glob found "abba",
> because your "artist" is "Abba"


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

 
Reply With Quote
 
lasitha
Guest
Posts: n/a
 
      03-01-2009
On Sun, Mar 1, 2009 at 7:45 PM, Harry Nash <(E-Mail Removed)> wrote:
> Artist = ABBA
> Dir.chdir("e:/music")
> Dir["#{artist}"]
>
> I tried a number of things here, I need a positive or negitave
> return; and, how to get the return value.


If all you need is to know whether the directory exists, then
File.exist?('ABBA')
will suffice (although it is case-sensitive).

Solidarity,
lasitha

 
Reply With Quote
 
Harry Nash
Guest
Posts: n/a
 
      03-01-2009
Yes this too works, it is simple too.
Thanks four your help!




lasitha wrote:
> On Sun, Mar 1, 2009 at 7:45 PM, Harry Nash <(E-Mail Removed)>
> wrote:
>> Artist = ABBA
>> Dir.chdir("e:/music")
>> Dir["#{artist}"]
>>
>> I tried a number of things here, I need a positive or negitave
>> return; and, how to get the return value.

>
> If all you need is to know whether the directory exists, then
> File.exist?('ABBA')
> will suffice (although it is case-sensitive).
>
> Solidarity,
> lasitha


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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Create a Virtual Directroy in IIS through .net Remoting Gourav ASP .Net 0 09-10-2010 12:28 PM
Recognising Sub-Items and sub-sub items using xslt Ben XML 2 09-19-2007 09:35 AM
ftp connection and commands (directroy size, etc) Arne Python 3 04-14-2006 06:18 PM
Sub Dir, Virtual dir, what do I use? =?Utf-8?B?UnVkeQ==?= ASP .Net 0 06-12-2005 08:25 PM



Advertisments