我需要逐行读取文件,以便它读取第一行,用它做某事,然后取第二行,用它做某事等等。
我知道如何逐行阅读文本文件:
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循环,该怎么做?
答案 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)
}
显然,您需要处理没有长度列表的情况。