Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > split question

Reply
Thread Tools

split question

 
 
Li Chen
Guest
Posts: n/a
 
      10-07-2009
Hi all,

I try to split a line that is separated by 'tab' and expect return an
array with all the elements containing empty space. But my code doesn't
work. Any idea?

Thanks,

Li

C:\Documents and Settings\chen41\Desktop>irb
irb(main):001:0> s='\t\t\t\t\t\t\t\t'
=> "\\t\\t\\t\\t\\t\\t\\t\\t"
irb(main):002:0> s.split(/\t/)
=> ["\\t\\t\\t\\t\\t\\t\\t\\t"]
irb(main):003:0> s.split(/\\t/)
=> []
irb(main):004:0>
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Ryan Davis
Guest
Posts: n/a
 
      10-07-2009

On Oct 7, 2009, at 14:29 , Li Chen wrote:

> Hi all,
>
> I try to split a line that is separated by 'tab' and expect return an
> array with all the elements containing empty space. But my code
> doesn't
> work. Any idea?
>
> Thanks,
>
> Li
>
> C:\Documents and Settings\chen41\Desktop>irb
> irb(main):001:0> s='\t\t\t\t\t\t\t\t'
> => "\\t\\t\\t\\t\\t\\t\\t\\t"


These aren't tabs. They're "\" followed by "t", you can tell because
the "\" is backslashed, meaning it is a literal backslash.

Use double quotes instead.

> irb(main):002:0> s.split(/\t/)
> => ["\\t\\t\\t\\t\\t\\t\\t\\t"]
> irb(main):003:0> s.split(/\\t/)
> => []
> irb(main):004:0>
> --
> Posted via http://www.ruby-forum.com/.
>



 
Reply With Quote
 
 
 
 
Josh Cheek
Guest
Posts: n/a
 
      10-07-2009
[Note: parts of this message were removed to make it a legal post.]

On Wed, Oct 7, 2009 at 4:29 PM, Li Chen <(E-Mail Removed)> wrote:

> Hi all,
>
> I try to split a line that is separated by 'tab' and expect return an
> array with all the elements containing empty space. But my code doesn't
> work. Any idea?
>
> Thanks,
>
> Li
>
> C:\Documents and Settings\chen41\Desktop>irb
> irb(main):001:0> s='\t\t\t\t\t\t\t\t'
> => "\\t\\t\\t\\t\\t\\t\\t\\t"
> irb(main):002:0> s.split(/\t/)
> => ["\\t\\t\\t\\t\\t\\t\\t\\t"]
> irb(main):003:0> s.split(/\\t/)
> => []
> irb(main):004:0>
> --
> Posted via http://www.ruby-forum.com/.
>
>

Single quotes treat things literally, like you can't interpolate, and \t is
treated as two separate characters.

$irb

>> RUBY_VERSION

=> "1.8.6"

>> s = '\t\t\t\t\t\t\t\t'

=> "\\t\\t\\t\\t\\t\\t\\t\\t"

>> s = "\t\t\t\t\t\t\t\t"

=> "\t\t\t\t\t\t\t\t"

>> s.split /\t/

=> []

>> 'abc#{2}def'

=> "abc\#{2}def"

>> "abc#{2}def"

=> "abc2def"

 
Reply With Quote
 
Li Chen
Guest
Posts: n/a
 
      10-07-2009
Ryan Davis wrote:
> On Oct 7, 2009, at 14:29 , Li Chen wrote:
>
>>
>> C:\Documents and Settings\chen41\Desktop>irb
>> irb(main):001:0> s='\t\t\t\t\t\t\t\t'
>> => "\\t\\t\\t\\t\\t\\t\\t\\t"

>
> These aren't tabs. They're "\" followed by "t", you can tell because
> the "\" is backslashed, meaning it is a literal backslash.
>
> Use double quotes instead.


Here is what I get using double quotes. I get an empty array only.


C:\Documents and Settings\chen41\Desktop>irb
irb(main):001:0> s="\t\t\t\t\t\t\t\t"
=> "\t\t\t\t\t\t\t\t"
irb(main):002:0> s.split(/\t/)
=> []
irb(main):003:0>

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

 
Reply With Quote
 
Siep Korteling
Guest
Posts: n/a
 
      10-07-2009
Li Chen wrote:
> Ryan Davis wrote:
>> On Oct 7, 2009, at 14:29 , Li Chen wrote:
>>
>>>
>>> C:\Documents and Settings\chen41\Desktop>irb
>>> irb(main):001:0> s='\t\t\t\t\t\t\t\t'
>>> => "\\t\\t\\t\\t\\t\\t\\t\\t"

>>
>> These aren't tabs. They're "\" followed by "t", you can tell because
>> the "\" is backslashed, meaning it is a literal backslash.
>>
>> Use double quotes instead.

>
> Here is what I get using double quotes. I get an empty array only.
>
>
> C:\Documents and Settings\chen41\Desktop>irb
> irb(main):001:0> s="\t\t\t\t\t\t\t\t"
> => "\t\t\t\t\t\t\t\t"
> irb(main):002:0> s.split(/\t/)
> => []
> irb(main):003:0>


str.split takes two parameters: the pattern and optionally the "limit"
From the docs:
If the limit parameter is omitted, trailing null fields are suppressed.
If limit is a positive number, at most that number of fields will be
returned (if limit is 1, the entire string is returned as the only entry
in an array). If negative, there is no limit to the number of fields
returned, and trailing null fields are not suppressed.

So

s = "\t\t\t\t"
s.split("\t") #all null fields
#=> []
s.split("\t",-1)
#=> ["", "", "", ""]

hth,

Siep

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

 
Reply With Quote
 
David A. Black
Guest
Posts: n/a
 
      10-07-2009
Hi --

On Thu, 8 Oct 2009, Siep Korteling wrote:

> Li Chen wrote:
>> Ryan Davis wrote:
>>> On Oct 7, 2009, at 14:29 , Li Chen wrote:
>>>
>>>>
>>>> C:\Documents and Settings\chen41\Desktop>irb
>>>> irb(main):001:0> s='\t\t\t\t\t\t\t\t'
>>>> => "\\t\\t\\t\\t\\t\\t\\t\\t"
>>>
>>> These aren't tabs. They're "\" followed by "t", you can tell because
>>> the "\" is backslashed, meaning it is a literal backslash.
>>>
>>> Use double quotes instead.

>>
>> Here is what I get using double quotes. I get an empty array only.
>>
>>
>> C:\Documents and Settings\chen41\Desktop>irb
>> irb(main):001:0> s="\t\t\t\t\t\t\t\t"
>> => "\t\t\t\t\t\t\t\t"
>> irb(main):002:0> s.split(/\t/)
>> => []
>> irb(main):003:0>

>
> str.split takes two parameters: the pattern and optionally the "limit"
>> From the docs:

> If the limit parameter is omitted, trailing null fields are suppressed.
> If limit is a positive number, at most that number of fields will be
> returned (if limit is 1, the entire string is returned as the only entry
> in an array). If negative, there is no limit to the number of fields
> returned, and trailing null fields are not suppressed.
>
> So
>
> s = "\t\t\t\t"
> s.split("\t") #all null fields
> #=> []
> s.split("\t",-1)
> #=> ["", "", "", ""]


["", "", "", "", ""] I think


David

--
The Ruby training with D. Black, G. Brown, J.McAnally
Compleat Jan 22-23, 2010, Tampa, FL
Rubyist http://www.thecompleatrubyist.com

David A. Black/Ruby Power and Light, LLC (http://www.rubypal.com)

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
a split is not a split Dumbell Computer Support 3 03-09-2009 10:45 PM
String#split(/\s+/) vs. String#split(/(\s+)/) Sam Kong Ruby 5 08-12-2006 07:59 PM
How can I split database results with ExecuteReader and Split? needin4mation@gmail.com ASP .Net 2 05-05-2006 10:36 PM
split on '' (and another for split -1) trans. (T. Onoma) Ruby 10 12-28-2004 06:36 AM
Small inconsistency between string.split and "".split Carlos Ribeiro Python 11 09-17-2004 05:57 PM



Advertisments