2017-10-21 1 views
1

다른 정규식 문서를 살펴 봤지만 아직 이해하지 못했습니다. 누군가가 나를 도울 수 있기를 바랍니다.스칼라 정규식을 여러 공백과 새 줄로 나누었습니다.

나는 테이블과 같이 있습니다

program  1 0 1 1 0 0 0 0 0 0 0 1 
stmt_list 2 0 2 2 0 0 0 0 0 0 0 3 
stmt  4 0 5 6 0 0 0 0 0 0 0 0 

나는 배열에 파일 저장에서 그것을 읽고 싶어.

val source = io.Source.fromFile("file.txt").getLines.toList.mkString.split("\\W+") 

그리고 내가 좋아하는 출력을 받고 있어요 :

program 
1 
0 
1 
1 
0 
0 
0 
0 
0 
0 
0 
1stmt_list // this is problem, int and string together which I don't want. 
2 
0 
2 
2 
0 
0 
0 
0 
0 
0 
0 
3stmt 
4 
0 
. 
. 
. 

내가 \s 일치하는 모든 공백, 탭 또는 개행 문자를 배운 나는 다음과 같은했다. 하지만 시도했을 때 scala에 오류가 발생했습니다 error: invalid escape character. 나는 다른 단계들 : " +", /\W+/ 등을 시도했다. 아무도 작동하지 않는다. 어떤 도움을 주시면 감사하겠습니다. 필자의 목표는 문자열과 int 값만있는 2D 배열로 파일을 읽는 것입니다. map 사용하여 문제가 너무 많은 대신 개별적으로 각 라인에서 작동의 정규식 자체,하지만 당신은 ( mkString를 사용하여) 하나의 문자열로 모든 라인을 "병합"사실 아니다

답변

1

:

val source = Source.fromFile("file.txt") 
    .getLines.toList    // gets a list of file lines 
    .map(_.split("\\W+").toList) // maps each line into a list 

source.foreach(println) 
// List(program, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1) 
// List(stmt_list, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3) 
// List(stmt, 4, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0) 
+1

그'toList'하지 않고,'source'는'반복자 [목록 [문자열]] '을 입력있다 - 그것은 당신이 그 결과로 수행 할 작업에 따라 달라집니다하지만 난 당신이 중간 .toList : 진정한 –

+0

을 필요로하지 않는 것 같아요 - 대부분의 경우에 좋으며 특히'source.foreach (..) '의 결과를 변경하지는 않지만'List [List] [String]]이 필요하다면 필요합니다. –

관련 문제