Project

General

Profile

Feature #1159

StringScanner に文字ベースでのインデックスを返すメソッドがほしい

Added by matsuda (Akira Matsuda) over 10 years ago. Updated about 8 years ago.

Status:
Rejected
Priority:
Normal
Target version:
-

Description

=begin
松田と申します。

Ruby 1.9の StringScanner#pos (pointer) が現在はバイト単位
でのインデックスを返してくれるのですが、
文字列ベースでのインデックスを返すメソッドが欲しい、
または、posが文字列ベースでのインデックスを返すように
変更して欲しいです。
=end


Related issues

Related to Ruby trunk - Bug #3482: StringScanner#pos returns wrong character position if used with multibyte charsRejected06/26/2010Actions
Related to Ruby trunk - Bug #7442: StringScanner#charpos vs StringScanner#posClosed11/27/2012Actions
Has duplicate Ruby trunk - Feature #2645: Have a method in StringScanner which returns the position in characters rather than in bytesRejected01/25/2010Actions

Associated revisions

Revision d9c32d62
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49774 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 49774
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

Revision 49774
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

Revision 49774
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

Revision 49774
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

Revision 49774
Added by hsbt (Hiroshi SHIBATA) over 4 years ago

  • lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6). Fixed #1159, #1171, #1173 on rubygems/rubygems
  • test/rubygems: ditto.

History

#1

Updated by naruse (Yui NARUSE) over 10 years ago

=begin
成瀬です。

Akira Matsuda wrote:

Feature #1159: StringScanner に文字ベースでのインデックスを返すメソッドがほしい
http://redmine.ruby-lang.org/issues/show/1159

起票者: Akira Matsuda
ステータス: Open, 優先度: Normal
カテゴリ: core

松田と申します。

Ruby 1.9の StringScanner#pos (pointer) が現在はバイト単位
でのインデックスを返してくれるのですが、
文字列ベースでのインデックスを返すメソッドが欲しい、
または、posが文字列ベースでのインデックスを返すように
変更して欲しいです。

StringScanner#pos の文字位置への変更は IO#pos との絡みで難しく、
また、StringScanner#pos= や IO#pos= を使った後で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。

--
NARUSE, Yui naruse@airemix.jp

=end

#2

Updated by matsuda (Akira Matsuda) over 10 years ago

=begin
松田です。

On 2009/02/14, at 21:22, NARUSE, Yui wrote:

StringScanner#pos の文字位置への変更は IO#pos との絡
みで難しく、
また、StringScanner#pos= や IO#pos= を使った後
で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。

なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。

ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、
Stringを扱うのにString#[] と数えかたが違う点とか、
そういう違和感はやっぱりあるような気がします。

--
Akira Matsudaronnie@dio.jp

=end

#3

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

=begin
なかだです。

At Sun, 15 Feb 2009 01:55:49 +0900,
松田 明 wrote in [ruby-dev:38012]:

StringScanner#pos の文字位置への変更は IO#pos との絡
みで難しく、
また、StringScanner#pos= や IO#pos= を使った後
で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。

なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。

実装上難しいというより、

ss = StringScanner.new("あ")
ss.get_byte
ss.pos

の戻り値を定義できない限りどこかに矛盾を生じると思います。

ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、
Stringを扱うのにString#[] と数えかたが違う点とか、
そういう違和感はやっぱりあるような気がします。

むしろ、StringScannerを使っているのにインデックスを使っているこ
とのほうが、コードのまずさを示しているような気がします。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

=end

#4

Updated by naruse (Yui NARUSE) over 10 years ago

=begin
成瀬です。

松田 明 wrote:

On 2009/02/14, at 21:22, NARUSE, Yui wrote:

StringScanner#pos の文字位置への変更は IO#pos との絡みで難しく、
また、StringScanner#pos= や IO#pos= を使った後で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。

なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。

つまるところ、pos とかは IO の概念を踏襲しています。

ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、

インデックスって pos のことですよね。
なんで pos を扱う必要があるのかがそもそもいまいちわからなかったりはします。
エラー位置の表示とか?

Stringを扱うのにString#[] と数えかたが違う点とか、

String#[] でなく MatchData#[] を連想するべきでしょう。

そういう違和感はやっぱりあるような気がします。

StringScanner の全メソッドを把握してから考え直すと、その違和感は減ってきませんかね。
るりまでの記述がそのへん足りていない気はするので、そこを書いてみつつ、
修正案をまとめてみるのもよいのではないでしょうか。

--
NARUSE, Yui naruse@airemix.jp

=end

#5

Updated by naruse (Yui NARUSE) over 10 years ago

  • Category changed from core to ext
  • Status changed from Open to Feedback
  • Priority changed from Normal to 3

=begin

=end

#6

Updated by marcandre (Marc-Andre Lafortune) over 9 years ago

  • Assignee set to aamine (Minero Aoki)

=begin

=end

#7

Updated by naruse (Yui NARUSE) over 9 years ago

  • Status changed from Feedback to Rejected

=begin

=end

Also available in: Atom PDF