2015-04-28 34 views
0

我有簡單的問題:正則表達式的結果爲全球地圖(斯卡拉)

我想有映射值的是文本分析的結果:

example.txt 
Anna 
James 
Katy 

因此,作爲一個結果,它應該是大的地圖 - 這樣的事情:

user_1 : Anna 
user_2 : James 
user_3 : Katy 

我想用例類從解析邏輯分別持有它:

case class UserMap(userMap: Map[String, String]) 

於是,我開始分析它,我需要一些熟悉的東西:

(pseudo-scala) 
    def parseTxt: Parser[UserMap] = ".*".r ^^ { 
    case res => User(("user_1" -> res)) 
    } 

什麼是最好的辦法嗎?在這種情況下如何使用地圖?謝謝

+0

什麼......你就不能打開該文件在Scala中,通過讀取線線並將每行添加爲地圖中的用戶。爲什麼你需要類似Parser的東西......? –

+0

什麼是全球地圖? –

+0

@SarveshKumarSingh這只是一個例子:在真實的情況下,它是一個很大的XML文件,全球地圖只是一個簡單的地圖,所以我需要使用正則表達式來正確使用 – perc

回答

1

如果在所有的價格要使用Scala的解析器組合,然後在這裏是一個解決方案:

import scala.util.parsing.combinator.RegexParsers 

object SO29918479 extends App { 
    case class UserMap(userMap: Map[String, String]) 

    object UserParser extends RegexParsers { 
    def user: Parser[String] = """[a-zA-Z]+""".r 
    def users: Parser[List[String]] = (user ~ "\n".?).* ^^ (_.map(_._1)) 
    def userMap: Parser[UserMap] = users ^^ { a => 
     UserMap(a.zipWithIndex.map({case (user, index) => s"user_$index" -> user}).toMap) 
    } 
    } 

    println(UserParser.parse(UserParser.userMap, "Anna\nJames\nKaty")) 
}