Project

General

Profile

Actions

Feature #1159

closed

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

Added by matsuda (Akira Matsuda) about 15 years ago. Updated almost 13 years ago.

Status:
Rejected
Target version:
-

Description

=begin
松田と申します。

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


Related issues 3 (0 open3 closed)

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

Updated by naruse (Yui NARUSE) about 15 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

=end

Actions #2

Updated by matsuda (Akira Matsuda) about 15 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 Matsuda

=end

Actions #3

Updated by nobu (Nobuyoshi Nakada) about 15 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

Actions #4

Updated by naruse (Yui NARUSE) about 15 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

=end

Actions #5

Updated by naruse (Yui NARUSE) about 15 years ago

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

=begin

=end

Actions #6

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

  • Assignee set to aamine (Minero Aoki)

=begin

=end

Actions #7

Updated by naruse (Yui NARUSE) over 14 years ago

  • Status changed from Feedback to Rejected

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0