[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

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

Harry Nash

3/1/2009 2:15:00 PM

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-....

6 Answers

Jan-Erik R.

3/1/2009 2:20:00 PM

0

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.ht...
http://www.ruby-doc.org/core/classes/File.ht...

Harry Nash

3/1/2009 3:07:00 PM

0


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.ht...
> http://www.ruby-doc.org/core/classes/File.ht...

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

Jan-Erik R.

3/1/2009 3:14:00 PM

0

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" ;)


Harry Nash

3/1/2009 3:23:00 PM

0


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-....

lasitha

3/1/2009 3:26:00 PM

0

On Sun, Mar 1, 2009 at 7:45 PM, Harry Nash <hjnash@adistantstar.com> 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

Harry Nash

3/1/2009 3:44:00 PM

0

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 <hjnash@adistantstar.com>
> 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-....