How to substitute tabs into single spaces for a String

Discussion in 'Ruby' started by Peter Loftus, Apr 18, 2008.

  1. Peter Loftus

    Peter Loftus Guest

    val = " hello ".sub(/\t/, ' ')
    puts val

    Cant covert tabbed spaces into regular single spaces
    Anyone have any ideas?
    Peter Loftus, Apr 18, 2008
    1. Advertisements

  2. Peter Loftus

    Kyle Hunter Guest

    irb(main):006:0> "\tlol\t".gsub("\t", ' ')
    => " lol "
    Kyle Hunter, Apr 18, 2008
    1. Advertisements

    Hash: SHA1

    Peter Loftus wrote:
    | val = " hello ".sub(/\t/, ' ')
    | puts val
    | Cant covert tabbed spaces into regular single spaces
    | Anyone have any ideas?

    You could use a regex that converts whitespace into a single space, in
    case tbas aren't the \t character, but are expanded to spaces.

    (Best thing I found but Programming Ruby and The Ruby Way cover this,
    and Programming Ruby's 1st Edition is available for free.)

    - --
    Phillip Gawlowski

    ~ - You know you've been hacking too long when... discover that you're balancing your checkbook in octal.
    Version: GnuPG v1.4.8 (MingW32)
    Comment: Using GnuPG with Mozilla -

    -----END PGP SIGNATURE-----
    Phillip Gawlowski, Apr 18, 2008
  4. Peter Loftus

    fedzor Guest

    Use gsub instead of sub!

    sub only changes the first occurence, gsub chances all.

    val = " AWESOME ".gsub(/\t/, ' ')
    puts val

    If you're not living on the edge,
    then you're just wasting space.
    fedzor, Apr 18, 2008
  5. Peter Loftus

    Chris Shea Guest

    The code you posted will only substitute the first tab character into
    a single space. If you want all occurrences, use String#gsub.
    Secondly, if by "tabbed spaces" you mean that the string doesn't
    actually contain tabs, then asking to replace the tab character (\t)
    isn't going to do anything.

    If, for example, you know tabs have been converted to 4 spaces, you
    could do something like this val.gsub(/ {4}/, ' ').

    If what you really want is just to have any whitespace converted to a
    single space, you could do this: val.gsub(/\s+/, ' ')

    Chris Shea, Apr 18, 2008
  6. Peter Loftus

    Tim Pease Guest

    Use the String#tr comand

    str =3D "string\twith\ttabs""\t", " ")


    (and from the RDoc ...), to_str) =3D> new_str

    Returns a copy of str with the characters in from_str replaced by the =20=

    corresponding characters in to_str. If to_str is shorter than =20
    from_str, it is padded with its last character. Both strings may use =20
    the c1=97c2 notation to denote ranges of characters, and from_str may =20=

    start with a ^, which denotes all characters except those listed.

    "hello".tr('aeiou', '*') #=3D> "h*ll*"
    "hello".tr('^aeiou', '*') #=3D> "*e**o"
    "hello".tr('el', 'ip') #=3D> "hippo"
    "hello".tr('a-y', 'b-z') #=3D> "ifmmp"
    Tim Pease, Apr 18, 2008
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.