Stuart Clarke wrote:
> Hi all,
Hi Stuart
> 
> Struggling a little with the concept of an exercise I am doing.
> 
> I have two Ruby methods, the first does a simple string replace the
> second converts data to something else if the criteria is satisfied. See
> example below
> 
> def processer
>  field1 = data[0]
>  field2 = data[1]
>  field3 = data[2]
>  if field3.length < 100
>   field3 = field3
>  else
>   changer(field3)
>  end
>  field4 = data[3]
>  field5 = data[4]
>  if field5.length < 100
>   field5 = field5
>  else
>   changer(field5)
>  end
> end
> 
> 
> def changer(fieldData)
>  splitData = fieldData.split(",")
>  splitData.each do |output|
>   p output
> end
> 
> What I would like to happen is when field3 for example is longer than
> 100 and its data is passed to def charger, I want that method (def
> charger) to split the field on all commas and then return data to
> field3.
> 
> I could just put something like field3 = output, however when I get
> other fields for example field5 this will not work and therefore I need
> something generic that will give the data to the correct field.
> 
> I hope this makes sense. Any help is much appreciated
> 
> Regards
> 
> Stuart

First off, assigning field3=field3 and field5=field5 is not terribly 
useful. A better way of doing this would be

def processer
   field1 = data[0]
   field2 = data[1]
   field3 = if data[2].length < 100
               data[2]
            else
               changer(data[2])
            end
   field4 = data[3]
   field5 = if data[4].length < 100
               data[4]
            else
               changer(data[4])
            end
end

Ruby can do parallel assignment so we can change the assignment to

field1,field2,field3,field4,field5=data

Then go back and change field3 and 5 if we need to - note the comparison 
needs to change as well.

field3=changer(data[2]) if data[2].length !< 100
field5=changer(data[4)) if data[4].length !< 100

now for two repeats its probably not worth making a new method, but for 
3 I'd be tempted and for 4 I'd certainly write another method.  Lets do 
it anyway for practice.

def check_n_change(x)
   if x.length<100
      x
   else
      changer(x)
   end
end

The method returns the value of the last expression evaluated.

Your original changer method was almost right. First you had a syntax 
error as you need an end for the do and an end for the def.  But, the 
each block is not needed anyway.  so changer becomes

def changer(fieldData)
    fieldData.split(',')
end

and the whole program is thus

def processer
   field1, field2, field3, field4, field5=data
   check_n_change(field3)
   check_n_change(field5)
end

def check_n_change(x)
   if x.length<100
      x
   else
      changer(x)
   end
end

def changer(fieldData)
   fieldData.split(',')
end

Of course you could roll changer back up into check_n_change at this 
level of complexity.

Now, what would happen if data had more than 5 fields or fewer?  what if 
field3 was a number rather than a string?  You know your input data and 
so what other checks are necessary.

Hope this helps

Steve.