pos
戻り位置:-)あなたの助けのおかげで、しかしトリックがその位置では、単一のInteger
として位置のエンコーダ(scala.io.Position
)によってコードの行と列の組み合わせです:
オブジェクト位置は、* line と列番号を単一の整数でエンコードする便利な方法を提供します。符号化された行 (列)番号は0からLINE_MASK
(COLUMN_MASK
)の範囲*、* 0
は行(列)が未定義であり、* 1
は、最初の行(列)を表すことを示し ...
https://github.com/scala/scala/blob/v2.11.8/src/library/scala/io/Position.scalaより読みやすい情報を取得するために
http://www.scala-lang.org/api/2.11.8/#scala.io.Source $ RelaxedPosition $
は使用Postioner
:
現在の入力と位置だけでなく、次の文字メソッド がポジショナーに委譲されます。
例:
val doc = scala.io.Source.fromFile("aaa.txt")
val positioner = new doc.Positioner()
val positioned = doc.withPositioning(positioner)
positioned.next()
scala> positioner.cline -> positioner.ccol
res15: (Int, Int) = (1,2)
positioned.next()
scala> positioner.cline -> positioner.ccol
res17: (Int, Int) = (1,3)
P.S. Source
は、文字のストリームとしてデータを読み込むことを目的としていますので、getLines()
などの便利さを提供します。そのため、基本的にPositioner
は絶対位置ではなく行と列で動作します。
あなたはあなたのすべての文字の絶対位置を返すIterator
が必要な場合は、zipWithIndex
を使用します。
scala> val doc = scala.io.Source.fromFile("aaa.txt").zipWithIndex
doc: Iterator[(Char, Int)] = non-empty iterator
scala> doc.next()
res38: (Char, Int) = (a,0)
scala> doc.next()
res39: (Char, Int) = (a,1)
scala> doc.next()
res40: (Char, Int) = (a,2)
scala> doc.next()
res41: (Char, Int) = (a,3)
scala> doc.next()
res42: (Char, Int) =
(
,4)