如何在 Scala 中将多个地图导出到 csv?
How to export multiple maps to csv in Scala?
如何使用 scala 将所有这些地图导出到单个 csv 文件? mapKey 包含来自所有映射的所有键,但并非所有(语言)映射都可能具有某个键的值。
标题行应包含 "key"、"default"、"de"、"fr"、"it"、"en"
val mapDefault: Map[String, String] = messages.getOrElse("default",Map())
val mapDe: Map[String, String] = messages.getOrElse("de", Map())
val mapFr: Map[String, String] = messages.getOrElse("fr", Map())
val mapEn: Map[String, String] = messages.getOrElse("en", Map())
val mapIt: Map[String, String] = messages.getOrElse("it", Map())
var mapKey: Set[String] = mapDefault.keySet ++ mapDe.keySet ++
mapFr.keySet ++ mapEn.keySet ++ mapIt.keySet
如评论中所述 - 最好使用一些为您构建 CSV 的库,尤其是处理输入中的特殊字符(逗号或换行符)(如果您不小心,这会破坏您的 CSV)。
无论哪种方式 - 您首先必须将数据转换为具有固定顺序和列数的记录序列。
下面是一个不使用任何库的实现,只是为了展示它在 Scala 中是如何完成的要点——随意用适当的库替换实际的 CSV 创建:
// create headers row:
val headers = Seq("key", "default", "de", "fr", "it", "en")
// data rows: for each key in mapKey, create a Seq[String] with the values for this
// key (in correct order - matching the headers), or with empty String for
// missing values
val records: Seq[Seq[String]] = mapKey.toSeq.map(key => Seq(
key,
mapDefault.getOrElse(key, ""),
mapDe.getOrElse(key, ""),
mapFr.getOrElse(key, ""),
mapIt.getOrElse(key, ""),
mapEn.getOrElse(key, "")
))
// add the headers as the first record
val allRows: Seq[Seq[String]] = headers +: records
// create CSV (naive implementation - assumes no special chars in input!)
val csv: String = allRows.map(_.mkString(",")).mkString("\n")
// write to file:
new PrintWriter("filename.csv") { write(csv); close() }
如何使用 scala 将所有这些地图导出到单个 csv 文件? mapKey 包含来自所有映射的所有键,但并非所有(语言)映射都可能具有某个键的值。 标题行应包含 "key"、"default"、"de"、"fr"、"it"、"en"
val mapDefault: Map[String, String] = messages.getOrElse("default",Map())
val mapDe: Map[String, String] = messages.getOrElse("de", Map())
val mapFr: Map[String, String] = messages.getOrElse("fr", Map())
val mapEn: Map[String, String] = messages.getOrElse("en", Map())
val mapIt: Map[String, String] = messages.getOrElse("it", Map())
var mapKey: Set[String] = mapDefault.keySet ++ mapDe.keySet ++
mapFr.keySet ++ mapEn.keySet ++ mapIt.keySet
如评论中所述 - 最好使用一些为您构建 CSV 的库,尤其是处理输入中的特殊字符(逗号或换行符)(如果您不小心,这会破坏您的 CSV)。
无论哪种方式 - 您首先必须将数据转换为具有固定顺序和列数的记录序列。
下面是一个不使用任何库的实现,只是为了展示它在 Scala 中是如何完成的要点——随意用适当的库替换实际的 CSV 创建:
// create headers row:
val headers = Seq("key", "default", "de", "fr", "it", "en")
// data rows: for each key in mapKey, create a Seq[String] with the values for this
// key (in correct order - matching the headers), or with empty String for
// missing values
val records: Seq[Seq[String]] = mapKey.toSeq.map(key => Seq(
key,
mapDefault.getOrElse(key, ""),
mapDe.getOrElse(key, ""),
mapFr.getOrElse(key, ""),
mapIt.getOrElse(key, ""),
mapEn.getOrElse(key, "")
))
// add the headers as the first record
val allRows: Seq[Seq[String]] = headers +: records
// create CSV (naive implementation - assumes no special chars in input!)
val csv: String = allRows.map(_.mkString(",")).mkString("\n")
// write to file:
new PrintWriter("filename.csv") { write(csv); close() }