pos
回报的位置,但诀窍是,位置是作为一个单一的Integer
通过位置的编码器(scala.io.Position
)编码的行和列的组合:
对象位置提供了便利的方法来编码行 和列号在一个单一的整数。编码线路* (列)的数字范围从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)