Forum: Ruby-core [ruby-trunk - Feature #9116][Open] String#rsplit missing

F8ccaacf28ae129491de5f4de9888873?d=identicon&s=25 artagnon (Ramkumar Ramachandra) (Guest)
on 2013-11-16 09:35
(Received via mailing list)
Issue #9116 has been reported by artagnon (Ramkumar Ramachandra).

----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
3df767279ce7d81db0a5bb30f5136863?d=identicon&s=25 Matthew Kerwin (mattyk)
on 2013-11-16 11:21
(Received via mailing list)
On Nov 16, 2013 6:35 PM, "artagnon (Ramkumar Ramachandra)" <
artagnon@gmail.com> wrote:
>
> There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is
there any specific reason it hasn't already been done?
>

What is rsplit? How does it differ from split (with or without a second
paramater)? What is the use-case/demand for it?

Sent from my phone, so excuse the typos.
C4e88907313843cf07f6d85ba8162120?d=identicon&s=25 alexeymuranov (Alexey Muranov) (Guest)
on 2013-11-17 10:05
(Received via mailing list)
Issue #9116 has been updated by alexeymuranov (Alexey Muranov).


Out of curiosity, i have looked it up:
http://docs.python.org/2/library/string.html#string.rsplit
----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-42985

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
A14d1bca90d7ebeda50dca99aab381b9?d=identicon&s=25 Markus H. (markus_h)
on 2013-11-19 02:00
(Received via mailing list)
Issue #9116 has been updated by shevegen (markus heiler).


I am still not sure how it differs from #split().
----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43010

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
A14d1bca90d7ebeda50dca99aab381b9?d=identicon&s=25 Markus H. (markus_h)
on 2013-11-19 02:02
(Received via mailing list)
Issue #9116 has been updated by shevegen (markus heiler).


Oh, now I see:

"Except for splitting from the right, rsplit() behaves like split()
which is described in detail below."

So it basically splits from the right, not left, unlike #split() which
splits from the left, I think.

I suppose in Ruby you can do .reverse.split, but perhaps rsplit may be
more convenient. (I myself don't think I have had a need to use
something similar to rsplit so far).
----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43011

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
3df767279ce7d81db0a5bb30f5136863?d=identicon&s=25 Matthew Kerwin (mattyk)
on 2013-11-19 03:05
(Received via mailing list)
Issue #9116 has been updated by phluid61 (Matthew Kerwin).


=begin
I, too, looked up and read the documentation, a couple of times.

I understand that the difference only applies when a ((|limit|))
parameter is given, and so examples of the new API would be:

 'a.b.c'.rsplit('.')    #=> ["a", "b", "c"], same as #split
 'a.b.c'.rpslit('.', 2) #=> ["a.b", "c"]

I would want to clarify some of the other edge cases (from
((%String#split%))) before continuing:

* If ((|pattern|)) is a (({String})), then its contents are used as the
delimiter when splitting ((%str%)). If ((|pattern|)) is a single space,
((|str|)) is split on whitespace, with leading whitespace and runs of
contiguous whitespace characters ignored.

Would this have some right-handed equivalent in ((%#rsplit%))?  E.g.
"...with trailing whitespace and runs..."?  Or would it remain the same
as ((%#split%))?  Or some third option?

E.g.:
  ' x  y '.rsplit(' ')   #=> ["x", "y"], same as split?
  ' x  y '.split(' ',-1) #=> ["", "x", "y"] or ["x", "y", ""] or ..?

* 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.

Similarly, would this become: "...leading null fields..." in both
instances?

E.g.:
  '..x..'.rsplit('.')    #=> ["x", "", ""] or ["", "", "x"] or ..?
  '..x..'.rsplit('.',-1) #=> ["", "", "x", "", ""], same as #split?

Note that this would be another difference from ((%#split%)), which
((*doesn't*)) depend on the ((|limit|)) parameter.

Seems like a lot of work.  What is the demand for this feature?
=end
----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43014

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
C4e88907313843cf07f6d85ba8162120?d=identicon&s=25 alexeymuranov (Alexey Muranov) (Guest)
on 2013-11-19 11:25
(Received via mailing list)
Issue #9116 has been updated by alexeymuranov (Alexey Muranov).


=begin
--- phluid61 (Matthew Kerwin) wrote:

--- > I understand that the difference only applies when a ((|limit|))
parameter is given

It is not only when (({limit})) parameter is given:

  "aaa".split("aa")  # =>["", "a"]
  "aaa".rsplit("aa") # => ["a", ""]

Maybe with a regex there can be a more meaningful example.
=end
----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43018

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
C4e88907313843cf07f6d85ba8162120?d=identicon&s=25 alexeymuranov (Alexey Muranov) (Guest)
on 2013-11-19 11:37
(Received via mailing list)
Issue #9116 has been updated by alexeymuranov (Alexey Muranov).


=begin
--- phluid61 (Matthew Kerwin) wrote:

--- > Would this have some right-handed equivalent in ((%#rsplit%))?
E.g. "...with trailing whitespace and runs..."?  Or would it remain the
same as ((%#split%))?  Or some third option?

IMO, if it is introduced, i would say it must be completely symmetric
with (({split})).
=end

----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43019

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
3df767279ce7d81db0a5bb30f5136863?d=identicon&s=25 Matthew Kerwin (mattyk)
on 2013-11-19 11:44
(Received via mailing list)
Issue #9116 has been updated by phluid61 (Matthew Kerwin).


=begin
 alexeymuranov (Alexey Muranov) wrote:
 >
 > It is not only when (({limit})) parameter is given:
 >
 >   "aaa".split("aa")  # => ["", "a"]
 >   "aaa".rsplit("aa") # => ["a", ""]

Ah, I see. Thank you.

 > Maybe with a regex there can be a more meaningful example.

I'm interested to see how it would be achieved with regex, from an
implementation point of view.

=end

----------------------------------------
Feature #9116: String#rsplit missing
https://bugs.ruby-lang.org/issues/9116#change-43020

Author: artagnon (Ramkumar Ramachandra)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:


There's nothing corresponding to Python's rsplit(). A quick glance at
rb_str_split_m() tells me that it should be pretty trivial to implement.
Is there any specific reason it hasn't already been done?
This topic is locked and can not be replied to.