如何同时从文本文件中读取不同的行

时间:2014-12-01 23:38:19

标签: scala

我需要逐行读取文件,以便它读取第一行,用它做某事,然后取第二行,用它做某事等等。

我知道如何逐行阅读文本文件:

for(line <- Source.fromFile("file.txt").getLines())
{
   insert(line) **Use the first line of the file in this function
   reverse(line) **Use the second line of the file in this function
}

在insert函数中,首先我要使用文件的第一行,而在反向函数中我想使用第二行,然后在循环的第二次迭代中,我想使用第3行插入功能和反向功能中的第4行等。怎么做?

编辑:这只是一个例子。我想要一般性的东西,比如假设我想使用第一行,第二行,第三行然后迭代for循环,该怎么做?

3 个答案:

答案 0 :(得分:2)

很多聪明的解决方案。这是一个使用zipWithIndex的简单方法,可以处理行数不均匀的情况。

for((line,index) <- Source.fromFile("file.txt").getLines().zipWithIndex)
{
  if (index % 2 == 0) insert(line) 
  else reverse(line)
}

答案 1 :(得分:1)

另一种方法,使用grouped,考虑到(可能)不均匀的行数,

Source.fromFile("file.txt")
  .getLines
  .grouped(2)
  .map { xs => (xs.head, xs.last.reverse) }

注意getLines给出一个迭代器,一次取一行,顺序,然后grouped给另一个迭代器带有同时的成对行处理。这与同时读取文件的多行形成对比。

答案 2 :(得分:0)

使用sliding将您的行分组成两对。

for(pairs <- Source.fromFile("file.txt").getLines().sliding(2, 2)) {
    insert(pairs.head)
    reverse(pairs.last)
}

显然,您需要处理没有长度列表的情况。