任务
分成三步来完成按行读入,并拆分。
(1)组装对象数组
(2)对对象数组做数据处理
(3)保存结果到文件。
按行读取文本文件
任务
- 读入目录下的score.txt文件 使用getLines来以行为单位读取内容
- 计算
(1) 每个同学的总分
(2) 平均分
- 把计算结果写入到score_result.txt文件中
基本代码:
package score
/**
* 任务
* 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)
}
}
}
组装数据对象
定义case class ,分别去new 对象,并赋值
基本代码:
package score
/**
* 任务
* 1. 读入目录下的score.txt文件
* 使用getLines来以行为单位读取内容
* 2. 计算
* (1) 每个同学的总分
* (2) 平均分
*
* 3. 把计算结果写入到score_result.txt文件中
*
*/
object score02 {
case class Stu(name:String,yuwen:Double,shuxue:Double,yingyu:Double)
def main(args: Array[String]): Unit = {
// 定义一个可变List
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}")
})
}
}
文件信息:
姓名,语文,数学,英语
张三,88,66,95
李四,99,84,75
王五,56,78,90
孙强,98,75,90
分析数据
计算每个人的总分和平均分的基本代码:
object score02 {
case class Stu(name:String,yuwen:Double,shuxue:Double,yingyu:Double)
def main(args: Array[String]): Unit = {
// 定义一个可变List
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)
}
//3. 写入一个新的文件
val filewriter=new FileWriter("score_result.txt")
stuList.foreach(stu =>{
val total=stu.yuwen+stu.shuxue+stu.yingyu
filewriter.write(s"${stu.name},总分${total},平均分: ${total/3} \n")
println(s"${stu.name}写入成功")
})
filewriter.close()
}
}
计算单科最高分的基本代码:
// 计算单科最高分
filewriter.write("最高分 \n")
filewriter.write(s"语文:${stuList.map(_.yuwen).max} \n")
filewriter.write(s"数学:${stuList.map(_.shuxue).max} \n")
filewriter.write(s"英语:${stuList.map(_.yingyu).max} \n")
考了单科第一的人分别是:
filewriter.write("最高分 \n")
val yuwen_max=stuList.map(_.yuwen).max
filewriter.write(s"语文:${yuwen_max} \n")
filewriter.write(s"考了语文最高分的人是:${stuList.filter(_.yuwen==yuwen_max).map(_.name).mkString(",")} \n")
// 查找
val shuxue_max=stuList.map(_.shuxue).max
filewriter.write(s"数学:${shuxue_max} \n")
filewriter.write(s"考了数学最高分的人是:${stuList.filter(_.shuxue==shuxue_max).map(_.name).mkString(",")} \n")
val yingyu_max=stuList.map(_.yingyu).max
filewriter.write(s"英语:${yingyu_max} \n")
filewriter.write(s"考了英语最高分的人是:${stuList.filter(_.yingyu==yingyu_max).map(_.name).mkString(",")} \n")
结果录入:
张三,总分249.0,平均分: 83.0
李四,总分258.0,平均分: 86.0
王五,总分224.0,平均分: 74.66666666666667
孙强,总分263.0,平均分: 87.66666666666667
最高分
语文:99.0
考了语文最高分的人是:李四
数学:84.0
考了数学最高分的人是:李四
英语:95.0
考了英语最高分的人是:张三