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

Discussion in 'Ruby' started by Harry Nash, Mar 1, 2009.

  1. Harry Nash

    Harry Nash Guest

    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/.
     
    Harry Nash, Mar 1, 2009
    #1
    1. Advertising

  2. Harry Nash

    badboy Guest

    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
     
    badboy, Mar 1, 2009
    #2
    1. Advertising

  3. Harry Nash

    Harry Nash Guest

    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/.
     
    Harry Nash, Mar 1, 2009
    #3
  4. Harry Nash

    badboy Guest

    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" ;)
     
    badboy, Mar 1, 2009
    #4
  5. Harry Nash

    Harry Nash Guest

    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/.
     
    Harry Nash, Mar 1, 2009
    #5
  6. Harry Nash

    lasitha Guest

    On Sun, Mar 1, 2009 at 7:45 PM, Harry Nash <> 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
     
    lasitha, Mar 1, 2009
    #6
  7. Harry Nash

    Harry Nash Guest

    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 <>
    > 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/.
     
    Harry Nash, Mar 1, 2009
    #7
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?UnVkeQ==?=

    Sub Dir, Virtual dir, what do I use?

    =?Utf-8?B?UnVkeQ==?=, Jun 12, 2005, in forum: ASP .Net
    Replies:
    0
    Views:
    432
    =?Utf-8?B?UnVkeQ==?=
    Jun 12, 2005
  2. Arne
    Replies:
    3
    Views:
    360
    Stefan Schwarzer
    Apr 14, 2006
  3. Ben
    Replies:
    2
    Views:
    903
  4. Gourav
    Replies:
    0
    Views:
    408
    Gourav
    Sep 10, 2010
  5. Lawrence D'Oliveiro

    Death To Sub-Sub-Sub-Directories!

    Lawrence D'Oliveiro, May 5, 2011, in forum: Java
    Replies:
    92
    Views:
    2,046
    Lawrence D'Oliveiro
    May 20, 2011
Loading...

Share This Page