2012-01-16 3 views
1

CSV 파일을 구문 분석하고 스칼라를 사용하여 웹 서비스에 게시하는 방법에 대해 머리를 감싸는 데 어려움을 겪고 있습니다.파일을 구문 분석하고 스칼라로 맵을 생성하는 데 도움이 필요합니다.

기본 아이디어는 csv 파일에서 게시 매개 변수를 만들어야한다는 것입니다. 거기에 헤더에 대한 매개 변수가 될 것이고 다음 행은 값 즉.

이 등 매개 변수 firstname=John&lastname=Doe&age=30&weight=180&height=72에 매핑 할

firstname, lastname, age, weight, height 
John, Doe, 30, 180, 72 
Mary, Jane, 28, 120, 64 

예를 들어, CSV

I 데이터를 분석하기 위해 다음과 같은 스칼라을 가지고 있지만 다음에 무엇을 알아낼 수 없습니다

val lines = fromFile("runners/io/m2m/naf/ARDS.csv").getLines 
     for ((line, cnt) <- lines.zipWithIndex) { 
     if (cnt == 0) { 
      for((header, i) <- CsvParser.parse(line).view.zipWithIndex){ 

      } 
     }else { 
      for((data, i) <- CsvParser.parse(line).view.zipWithIndex) { 

      } 
     } 
     } 
+0

저장 i''에 의해 색인이지도에서 헤더 및 각'data' 항목에 대한 데이터 열 매핑 나에게 헤더 (COL)의지도를 준 ,지도를 조회하고 출력 헤더 = 데이터. 도움이 더 필요하십니까? – milan

+0

그래, 나는 불변의지도 등을 사용할 수 있지만이 문제에 대한 기능적 접근이 있어야만하는 것 같다. – chiappone

+0

오, 당신이 '기능적 접근법'을 찾고 있다는 질문에 구체적으로 언급되지 않았습니다. – milan

답변

6

어때요?

scala> for((map, cnt) <- rowMapsIterator.zipWithIndex) println(cnt + ": " + map) 
0: Map(firstname -> John, weight -> 180, lastname -> Doe, age -> 30, height -> 72) 
1: Map(firstname -> Mary, weight -> 120, lastname -> Jane, age -> 28, height -> 64) 

을 얻으려면 & 단락 지어진 형식 대신 할 것이라고 : 같은

val lines = fromFile("runners/io/m2m/naf/ARDS.csv").getLines 
val header = CsvParser.parse(lines.next) 
val rowMapsIterator = 
    for (line <- lines) 
    yield (header zip CsvParser.parse(line)).toMap 

그런 다음 결과를 보면

scala> for ((s, cnt) <- rowStringIterator.zipWithIndex) println(cnt + ": " + s) 
0: weight=180&firstname=John&height=72&age=30&lastname=Doe 
1: weight=120&firstname=Mary&height=64&age=28&lastname=Jane 
+0

은 지퍼와 같은 것이 있다는 것을 결코 알지 못했습니다. 고마워. – chiappone

0
:이 당신에게 제공

val rowStringIterator = rowMapsIterator.map(_.map { case (k, v) => k + "=" + v }.mkString("&")) 

나는 dhg의 a를 사용했다. nswitch하지만 목록을 평평하게 만들었습니다. CsvParser가 List [List]를 돌려 주었기 때문입니다. 따라서

-

val header = CsvParser.parse(lines.next).flatten 


val rowMapsIterator = 
| for (line <- lines) 
|  yield (header zip CsvParser.parse(line).flatten).toMap 

이는

scala> rowMapsIterator.foreach(println) 
Map(weight -> 180, firstname -> John, height -> 72, age -> 30, lastname -> Doe) 
Map(weight -> 120, firstname -> Mary, height -> 64, age -> 28, lastname -> Jane) 
관련 문제