When parsing win/loss scores from ESPN, I notice that the output looks perfectly normal, even when I carefully inspect the output. It looks like this: wloss = /^\w\s\d{1,2}-\d{1,2}/ puts @rows[i][3] @rows[i][4] = @rows[i][3].scan(wloss) puts @rows[i][4] L 31-27 (this is @rows[i][3]) L 31-27 (this is @rows[i][4]) W 32-14 etc.... W 32-14 L 27-14 L 27-14 W 38-22 W 38-22 W 16-13 OT W 16-13 W 63-14 W 63-14 W 38-35 OT W 38-35 W 13-10 W 13-10 I scan and keep only the valid data with @rows[i][4]: If the rows are empty or not in this format, I just return an empty array. When I upload this same visible data to my database, it ends up appearing as: --- - L 31-27 --- - W 32-14 --- - L 27-14 --- - W 38-22 etc. etc. If the row is empty in the database it appears as: --- - [] So, in my view I end up having to use: <%=h schedule.winloss.scan(/\w\s\d{1,2}-\d{1,2}/) %> If I try to sub /---/ out of the line, it does nothing. I have no idea why it''s showing up there and why the puts output doesn''t even show it. Are these some type of invisible characters that are meant to denote spaces of some sort? Any help would be appreciated. I just want to clean my database so that it does not show the dashes --- -. -- Posted via http://www.ruby-forum.com/.
This is pretty funny. Just by typing out the issue, I just found my problem. When uploading to the database I was doing: win_loss = myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/) Instead of .. win_loss = "#{myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/)}" .. I realized this when I saw the empty [] array listed in the database. Problem fixed. My apologies... -- Posted via http://www.ruby-forum.com/.
Alpha Blue wrote:> When parsing win/loss scores from ESPN, I notice that the output looks > perfectly normal, even when I carefully inspect the output. > > It looks like this: > > wloss = /^\w\s\d{1,2}-\d{1,2}/ > puts @rows[i][3][...] Unrelated to your issue, but...what''s with the [i] ? If you want to write PHP, do it in PHP. If you want to write Ruby, use .each. :) Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
On Oct 26, 11:59 am, Alpha Blue <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> This is pretty funny. > > Just by typing out the issue, I just found my problem. > > When uploading to the database I was doing: > > win_loss = myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/) > > Instead of .. > > win_loss = "#{myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/)}"You can also do: myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/).to_s It will do the right thing when no match is found, etc. -- W> I realized this when I saw the empty [] array listed in the database. > > Problem fixed. My apologies...
Wes wrote:> On Oct 26, 11:59�am, Alpha Blue <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> > wrote: >> �win_loss = "#{myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/)}" > You can also do: > > myvars[i].scan(/\w\s\d{1,2}-\d{1,2}/).to_sExcellent point. If you''re #{interpolating} the whole string, you might just as well use the expression without quotes.> > It will do the right thing when no match is found, etc. > > -- WBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
Thanks fellas. I took the latter tip to heart and removed the quotes and used .to_s As for the [i], I''m iterating over multiple queries that have the exact same row count. Therefore, I don''t need to use each. I do use each and each_with_index a lot. (1..120).each do |i| ... end .. this suffices and allows me to count the exact number of iterations I need. In cases where I don''t know the row count, or the row count isn''t the same count across multiple tables, I don''t use the above. Thanks. -- Posted via http://www.ruby-forum.com/.
Alpha Blue wrote:> Thanks fellas. I took the latter tip to heart and removed the quotes > and used .to_s > > As for the [i], I''m iterating over multiple queries that have the exact > same row count. Therefore, I don''t need to use each. I do use each and > each_with_index a lot. > > (1..120).each do |i| > ... > end > > .. this suffices and allows me to count the exact number of iterations I > need.NO! NO! NO! You''ve hard-coded the value 120. There''s absolutely NO reason to do that, and it just makes your code more brittle. Worse, you''re using a "magic number" to do it, not a symbolic constant, so it will be harder to change each instance when the next team joins the NCAA. If you just did @rows.each, you''d never need to change it. Why introduce pointless couplings and dependencies into your code? The array already knows how many records it contains, so let it keep track itself.> In cases where I don''t know the row count, or the row count isn''t > the same count across multiple tables, I don''t use the above.You should only ever use that syntax if you''re actually dealing with the numbers 1 to 120 as data (say, if you''re calculating the first 120 factorial numbers). If you want to iterate over a recordset, *always* use each.> > Thanks.Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
Hi Marnen, I see what you are saying and yes, that makes a lot of sense. I do use each and often. I rarely use the (1..120) but could I perhaps do: datasize = Team.all.size (1..datasize).each ? What I''m trying to accomplish and I only have to do this in a few instances is that there will be times that I need to iterate over x number of teams but I don''t need to iterate over a returned query. In otherwords, I''m creating data not pulling data. I can understand if I do something along the line of: team = Team.all team.each do |row| .. end But, I''m not working with the teams query, or any other query. I''m working with actual data that I need to iterate over x number of teams (by count) which happens to be 120 teams. However, you bring up a valid point in that if another team enters FBS, I''d have to change the hard count of the data iteration from 120 to 121. This is why I believe doing the .size would suffice. Unless, you think there is another way? Thanks. -- Posted via http://www.ruby-forum.com/.
Marnen Laibow-Koser
2009-Oct-27 04:20 UTC
Iteration -- was: Re: Trying to remove invalid characters
Alpha Blue wrote:> Hi Marnen, > > I see what you are saying and yes, that makes a lot of sense. I do use > each and often. I rarely use the (1..120) but could I perhaps do: > > datasize = Team.all.size > (1..datasize).each > > ?If you were to do it that way, then you''d want to use Team.count. But you probably don''t need the extra query...> > What I''m trying to accomplish and I only have to do this in a few > instances is that there will be times that I need to iterate over x > number of teams but I don''t need to iterate over a returned query.Then why do you need to iterate over the 120 teams? You must have 120 of *something* if you are in a position where you need to do this.> > In otherwords, I''m creating data not pulling data. > > I can understand if I do something along the line of: > > team = Team.all > > team.each do |row| > .. > end > > But, I''m not working with the teams query, or any other query. I''m > working with actual data that I need to iterate over x number of teams > (by count) which happens to be 120 teams.So...what''s the structure of that data?> However, you bring up a valid > point in that if another team enters FBS, I''d have to change the hard > count of the data iteration from 120 to 121.Yeah, magic numbers are generally bad.> This is why I believe > doing the .size would suffice.Except that it should be .count, so that it can use the DB''s count(*) function.> > Unless, you think there is another way? >I think it''s likely. The reason I asked about the structure of your data is that I strongly suspect that some part of it is an array of 120 elements. If not, then how are you using your loop index?> Thanks.Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.