2014-12-01 2 views
0

첫 줄을 읽은 다음 첫 줄을 읽은 다음 두 번째 줄을 가져 와서 뭔가를 수행하는 식으로 한 줄씩 파일을 읽어야합니다. 처음에는 파일의 첫 번째 줄을 사용하려면, 삽입 기능에다른 줄을 텍스트 파일에서 동시에 읽는 방법

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 
} 

및 역 기능에 나는를 사용하려면 :

나는 라인으로 텍스트 파일 라인을 읽는 방법을 알고 두 번째 줄, 루프의 두 번째 반복에서 삽입 기능에서 세 번째 줄과 네 번째 줄에서 역순으로 사용하고 싶습니다. 그렇게하는 방법?

편집 : 이것은 단지 예입니다. 나는 첫 번째 라인, 두 번째 라인, 세 번째 라인을 사용하고 for 루프를 반복하고 싶다면 어떻게 할 것인가?

답변

0

sliding을 사용하여 회선을 2 개 쌍으로 그룹화하십시오.

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

분명히 길이가 짝수가 아닌 조건을 처리해야합니다.

+0

일반적인 경우로 만들고 싶습니다. 이렇게 첫 번째와 두 번째 줄을 반복 한 다음 루프 반복을 원했던 예제였습니다. 첫 번째, 두 번째 및 세 번째 줄을 만들고 반복하는 방법을 원한다고 가정합니다. –

+0

그것을 알아 냈어! 고마워요. :) –

2

영리한 솔루션이 많습니다. zipWithIndex를 사용하는 간단한 예제가 있습니다. 고려 라인 (가능) 홀수 소요 grouped을 이용한 접근

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

하나 이상,

getLines 한 번에 하나 개의 라인을 페치 반복자를 제공하는 것으로
Source.fromFile("file.txt") 
    .getLines 
    .grouped(2) 
    .map { xs => (xs.head, xs.last.reverse) } 

, 순차적이면 grouped에 대해 한 행을 갖는 또 다른 반복기를 동시에 처리합니다. 처리. 이것은 동시에 여러 줄의 파일을 읽는 것과는 대조적입니다.

+0

나는 그것을 일반적인 경우로 만들고 싶다. 이렇게 첫 번째와 두 번째 줄을 반복 한 다음 루프 반복을 원했던 예제였습니다. 첫 번째, 두 번째 및 세 번째 줄을 만들고 반복하는 방법을 원한다고 가정합니다. –

+0

'grouped'에서'Int' 값을 증가 시키십시오, 또한'xs.map {/ * awesome multiple lines processing * /}' – elm

+0

입력에 짝수 라인이 없다면 "xs .마지막". 그것은 고칠 정도로 쉽지만 n> 2로 어수선합니다. 또한 원래의 질문에는 명령 구조가있었습니다. 이것은 더 기능적인 구조를 가지고있었습니다. 이는 ".map {...}"을 ".foreach {xs => {insert (xs.head), reverse (xs.last)}}"로 바꾸면 해결할 수 있습니다. 그런 다음 다시 OP가 기능 변형을 요청했을 수 있습니다. 말하기 힘듭니다. –

관련 문제