(一)任务分析
分成三步来完成按行读入,并拆分。
(1)组装对象数组
(2)对对象数组做数据处理
(3)保存结果到文件。
(二)按行读取文本文件
由于一行表示一条数据,所以,我们可以一次读入一行。
以下是读取文件并打印每一行的示例:
/*
* 任务
* 1. 读入根目录下的score.txt文件
* 使用getlines来以行为单位读取内容
* 2. 计算
* (1)每个同学的总分
* (2)平均分
*
* 3. 把计算结果写入到score_result.txt文件中
*
* */
object score01 {
def main(args: Array[String]): Unit = {
// 1. 按照行为单位,一个一个去读入文件
val lines = scala.io.Source.fromFile("score.txt").getLines()
// 跳过第一行,第一行是表头
lines.next()
while(lines.hasNext){
val line = lines.next()
println(line)
}
}
}
结果:
张伟,87,92,88
李娜,90,85,95
王强,78,90,82
(三)组装数据对象
思路:定义case class ,分别去new 对象,并赋值。
object score01 {
case class Stu(name:String,yuwen:Double,shuxue:Double,yinyu:Double)
def main(args: Array[String]): Unit = {
// 定义一个可变列表
val stuList = scala.collection.mutable.ListBuffer[Stu]()
// 1. 按照行为单位,一个一个去读入文件
val lines = scala.io.Source.fromFile("score.txt").getLines()
// 跳过第一行,第一行是表头
lines.next()
while(lines.hasNext){
val line = lines.next()
val list = line.split(",")
stuList += Stu(list(0),list(1).toDouble,list(2).toDouble,list(3).toDouble )
}
/// 读取信息结束
stuList.foreach(stu => {
println(s"${stu.name},语文考了 ${stu.yuwen}")
})
}
}
结果:
张伟,语文考了 87.0
李娜,语文考了 90.0
王强,语文考了 78.0