Regular expression. newbie problem

Hi,

i know this is a pretty basic problem but im a newbie so any help would
be greatly appreciated

im trying to write a name class one which returns a first name a
surname, first and second initials

however, i realise i regular expression is needed to go through the name
to produce the correct output. however im unsure of whaty regular
expression to use and whether my class is looking correct in general

anyhelp would be greatly appreciated

thanks

name class:

class Name

  def initialize(name)
    @fname = name.slice!(rexesp)
    @sname = name.slice!(regexp)
    @mname = name.slice!(regexp)

  def firstname
    return @fname
  end

  def surname
    return @sname
  end

  def firstinitial
    return @finitial
  end

  def firstinitial
    return @sinitial
  end

···

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

Hi,

i know this is a pretty basic problem but im a newbie so any help would
be greatly appreciated

im trying to write a name class one which returns a first name a
surname, first and second initials

however, i realise i regular expression is needed to go through the name
to produce the correct output. however im unsure of whaty regular
expression to use and whether my class is looking correct in general

anyhelp would be greatly appreciated

thanks

name class:

class Name

  def initialize(name)
    @fname = name.slice!(rexesp)
    @sname = name.slice!(regexp)
    @mname = name.slice!(regexp)

  def firstname
    return @fname
  end

  def surname
    return @sname
  end

  def firstinitial
    return @finitial
  end

  def firstinitial
    return @sinitial
  end
--
Posted viahttp://www.ruby-forum.com/.

You can achieve this with ease by better utilizing Ruby's string
functionality
From irb:

first_name = 'Osmosis'

'Osmosis'

last_name = 'Jones'

'Jones'

full_name = [first_name, last_name].join(' ')

'Osmosis Jones'

short_name = [first_name, last_name.first].join(' ')

'Osmosis J'

initials = [(first_name.first + '.'), (last_name.first + '.').join(' ')

'O. J.'

···

On Dec 6, 9:42 am, Johnathan Smith <stu...@hotmail.com> wrote:

p "Chidiock Tichborne".strip.match( /^(\S+)( +\S.*)? +(\S+)$/ ).to_a
p "Edgar A. Poe".strip.match( /^(\S+)( +\S.*)? +(\S+)$/ ).to_a
p "J. R. R. Tolkien".strip.match( /^(\S+)( +\S.*)? +(\S+)$/ ).to_a
_,first,middle,sur = "Ambrose Bierce".
  strip.match( /^(\S+)( +\S.*)? +(\S+)$/ ).to_a
puts "#{ first }:#{ middle }:#{ sur }"

---- output ----
["Chidiock Tichborne", "Chidiock", nil, "Tichborne"]
["Edgar A. Poe", "Edgar", " A.", "Poe"]
["J. R. R. Tolkien", "J.", " R. R.", "Tolkien"]
Ambrose::Bierce

···

On Dec 6, 9:42 am, Johnathan Smith <stu...@hotmail.com> wrote:

Hi,

i know this is a pretty basic problem but im a newbie so any help would
be greatly appreciated

im trying to write a name class one which returns a first name a
surname, first and second initials

however, i realise i regular expression is needed to go through the name
to produce the correct output. however im unsure of whaty regular
expression to use and whether my class is looking correct in general

anyhelp would be greatly appreciated

thanks

name class:

class Name

  def initialize(name)
    @fname = name.slice!(rexesp)
    @sname = name.slice!(regexp)
    @mname = name.slice!(regexp)

  def firstname
    return @fname
  end

  def surname
    return @sname
  end

  def firstinitial
    return @finitial
  end

  def firstinitial
    return @sinitial
  end
--
Posted viahttp://www.ruby-forum.com/.

thank you very much for your help
and yes i realise this can be achieved but i plan to use this class in
conjections with others i have already written

would you be able to provide any help with the orignal problem?

thanks

···

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

class Name
  def initialize(name)
    @fname, @mname, @sname = name.split
  end
  attr_reader :fname, :mname, :sname
  def initials
    "#{fname[0].chr}.#{mname[0].chr}.#{sname[0].chr}"
  end
end

a = Name.new("Lee John Jarvis")
p a.fname #=> 'Lee'
p a.mname #=> 'John'
p a.sname #=> 'Jarvis'
p a.initials #=> 'L.J.J'

Although you probably should use some regexp to handle extra ordinary
middle names.

Or am I well off?

Regards,
Lee

···

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

Lee Jarvis wrote:

Regards,
Lee

Sorry, I didn't realize you didn't want middle names aswell, I kinda
thought that was what @mname was for originally..

As for the class, you don't end the initialize method or the class
itself.

And you redefine the 'firstinitial' method

Using attribute readers gets rid of the need for methods like this:

def foo
  return @bar
end

Regards,
Lee

···

--
Posted via http://www.ruby-forum.com/\.

a = Name.new("Lee John Jarvis")
p a.fname #=> 'Lee'
p a.mname #=> 'John'
p a.sname #=> 'Jarvis'
p a.initials #=> 'L.J.J'

hi,

the class looks good

although im getting errors with the output

im entering: a = Name.new("Johnathan Micheal Smith")

but im getting an error which says

syntax error near unexpected token `('

any idea why

thanks

···

--
Posted via http://www.ruby-forum.com/\.

Johnathan Smith wrote:

any idea why

thanks

class Name
  def initialize(name)
    @fname, @mname, @sname = name.split
  end
  attr_reader :fname, :mname, :sname
  def initials
    "#{fname[0].chr}.#{mname[0].chr}.#{sname[0].chr}"
  end
end

a = Name.new("Johnathan Micheal Smith")
p a.fname
p a.mname
p a.sname
p a.initials

Works for me..

c0re:~$ ruby test.rb
"Johnathan"
"Micheal"
"Smith"
"J.M.S"

Regards,
Lee

···

--
Posted via http://www.ruby-forum.com/\.

hmm still being unsuccessful

im using linux and have name.rb stored in a file called Ruby

can you see if im inputing anything wrong

sh-3.2$ cd Desktop
sh-3.2$ cd Ruby
sh-3.2$ a = Name.new("Stuart Richard Little")
sh: syntax error near unexpected token `('
sh-3.2$

···

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

Johnathan Smith wrote:

sh-3.2$ cd Desktop
sh-3.2$ cd Ruby
sh-3.2$ a = Name.new("Stuart Richard Little")
sh: syntax error near unexpected token `('
sh-3.2$

You are aware that you are trying to input ruby code into a unix shell, yes?

···

--
NP: Graveworm - Scars Of Sorrow
Jabber: sepp2k@jabber.org
ICQ: 205544826

You are aware that you are trying to input ruby code into a unix shell,
yes?

yes
but then i tried in irb too but still having problems

h-3.2$ irb
irb(main):001:0> name.rb
NameError: undefined local variable or method `name' for main:Object
        from (irb):1
irb(main):002:0> a = Name.new("John Matthew Johnson")
NameError: uninitialized constant Name
        from (irb):2

i know im probably being very thick here but i appreciate the help

···

--
Posted via http://www.ruby-forum.com/\.

working

sorry

···

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

Johnathan Smith wrote:

You are aware that you are trying to input ruby code into a unix shell,
yes?

yes
but then i tried in irb too but still having problems

h-3.2$ irb
irb(main):001:0> name.rb
NameError: undefined local variable or method `name' for main:Object
        from (irb):1
irb(main):002:0> a = Name.new("John Matthew Johnson")
NameError: uninitialized constant Name
        from (irb):2

i know im probably being very thick here but i appreciate the help

You need to require the file with the Name class in it.
But in this case.

Copy the code I gave you, (the class and the main code)
open up a shell and cd to the directory of the script and run:

~$ ruby name.rb

Regards,
Lee

···

--
Posted via http://www.ruby-forum.com/\.

Johnathan Smith wrote:

irb(main):001:0> name.rb
NameError: undefined local variable or method `name' for main:Object
        from (irb):1

You enter ruby code in irb. name.rb is not valid ruby code (well, it could be
if there's an object name with a method rb, but in this case there isn't) -
it's a file name. You could either write valid ruby code containing this
filename (like require "name.rb" which would load the file and run the code
inside it) or execute name.rb from the shell (by typing "./name.rb" or "ruby
name.rb", not by typing in ruby code). Assuming of course that the file
exists and contains valid ruby code.

irb(main):002:0> a = Name.new("John Matthew Johnson")
NameError: uninitialized constant Name
        from (irb):2

You have not previously defined Name (at least not in the current irb
session).

HTH,
Sebastian

···

--
NP: Anathema - Alternative 4
Jabber: sepp2k@jabber.org
ICQ: 205544826

h-3.2$ irb
irb(main):001:0> name.rb
NameError: undefined local variable or method `name' for main:Object
        from (irb):1
irb(main):002:0> a = Name.new("John Matthew Johnson")
NameError: uninitialized constant Name
        from (irb):2

sh-3.2$ cd Desktop
sh-3.2$ cd Ruby
sh-3.2$ a = Name.new("Stuart Richard Little")
sh: syntax error near unexpected token `('
sh-3.2$

Would I be a terrible person if I laughed at these?

···

--
Posted via http://www.ruby-forum.com/\.