文件读写-成绩分析(一)

26 阅读1分钟

(一)任务分析

分成三步来完成按行读入,并拆分。

(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)
    }
  }
}

结果:

张伟,879288
李娜,908595
王强,789082

(三)组装数据对象

思路:定义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