Saturday, December 27, 2014

Try googling 'Ruby question mark'...without the quotes

I've been following the exercises on RubyMonk and at least 2 exercises so far use a question mark.  This symbol is not at the end of empty? or include? etc.  It's not even being used in a regex.  When I can't figure something out, I get frustrated. I've given up on a few of these exercises and had to hit the option "See the solution".  It was even more frustrating when the solution uses syntax not introduced in the lesson or even hinted at on the page asking you to solving a problem.  RubyMonk is not the only site that has this problem.  Had to vent...sorry.

Some Ruby beginners but most intermediate and all advanced will know that what I speak of above is the ternary or conditional operator. I have been googling Ruby question mark and adding words like symbol and comparison.  Right now, I'm working on the problem named Number Shuffle.  I had to click on the "See the solution" option which is the second time I'm seeing a question mark.  Here's the specific line...

no_of_combinations = number.to_s.size == 3 ? 6 : 24

Searching for this kept sending me to pages that discussed array/string elements ending with a question mark or pages discussing regular expressions. I finally found a page that talks about [value] ? [value] : [value]  I guess I wasn't using the right search terms or something.

I found the explanation on this page...

http://ruby.about.com/od/beginningruby/a/The-Ternary-Or-Conditional-Operator.htm

Here is the text that set me straight and answered my question...

The general format of this expression is as follows: conditional ? true : false. If the conditional expression is true, then the operator will evaluate as the true expression, otherwise it will evaluate as the false expression.

Now that I found out that this is a ternary operator, I can google and find all kinds of explanations on it. It would be nice if online tutorials explained or gave references to all syntax used.

Wednesday, December 17, 2014

Learning Regex con't (xxxxxxx-xxxx where x's are digits)

This one (regex) didn't take me as long to figure out given all that I read about regular expressions.

As part of my homework for Learning Ruby the Hard Way, I'm still working on my editor that takes 8 pieces of information and inserts it all into a tab delimited format .txt file.  The second column needs to be in the format of xxxxxxx-xxxx where the x's are digits and the hyphen needs to be included.  This is an account id in the system I'm working with where I'm going to eventually create a script to combine rows from files a 3rd party agency is giving to us.

Back to the editor, I created a regex to only accept an account id that has 7 digits, a hyphen followed by 4 more digits.  This one was easy compared to the online tutorials I was reading over.  Just inserting the regex here so I'll have it for future reference.

/^\d{7}\-\d{4}$/

Maybe by the time I'm finished with the 2 projects I want to complete, I'll have a cook book of regex's.

Tuesday, December 16, 2014

Learning Regex (file name with .txt extension)

I've gone through 6-7 web pages and 2 tutorials.  I did an initial search for a regex for a file name.  I didn't search but a minute or two then decided I need to learn a little more about regular expressions than just how to come up with one to recognize a file name.

After reading through a lot of documentation, I believe I came up with what I needed but first a little background.

I'm on lesson 36 of Learn Ruby the Hard Way.  I'm not making a game like the home suggests to.  Instead, I'm making a script that will ask for eight pieces of information and it will create a tab delimited file with each piece of information.  I'm giving the user the option to name the file.  The requirements will be that it must only contain letters (upper/lower case), digits, a hyphen and an underscore character and the file extension must end with a ".txt" (without the double quotes).  If the user types in anything else, it won't be accepted.

So I'm still at the beginning of creating this script and had to stop for a few days to learn how to put together regular expressions.  This is what I have so far for an acceptable file name.

I chose this type of project over creating a game because I need to ultimately create a script that parses a tab delimited file and combines rows/records based on values in 2 columns.  That will be my next project.

Here's the regex that I came up with to accept a file name with the above mentioned requirements.

/^[^\W+]\w+\-?(.txt$)/

I'm always open for suggestions on simplifying my code. I'm in no way an expert but the above expression works for what I need it for.  I'll be studying regular expressions in more depth as I continue on with my projects.