loops - 如何遍历包含多个数字的行的文本文件,同时计算数字
问题描述
该文件类似于:
John Smith
100 90 80 90
50 60 80 99 40 20
但是文件中可以有任意数量的人员/等级。我知道如何遍历并获取此人的名字和姓氏,但是我如何遍历第一行数字,将它们添加到自己的总数中,然后遍历第二行并将它们添加到另一个总数中?
我还没有找到在 Go 中检查行尾的方法,所以我不知道如何区分第一行数字和第二行数字。
这是我尝试过的:
package main
import (
"fmt"
"os"
"log"
"bufio"
//"unicode"
//"container/list"
)
type Student struct {
FirstName string
LastName string
}
func main(){
fmt.Println("What is the name of your file?\n")
var filename string
fmt.Scan(&filename)
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords)
//var scanCount int = 0
//var studentCount = 1
//var gradeSum = 0
//var gradeAvg = 0
var students [100]Student
for scanner.Scan() {
students[0].FirstName = scanner.Text()
students[0].LastName = scanner.Text()
fmt.Println(students[0].FirstName)
//count ++
}
}
这就是我到目前为止所拥有的。我尝试过的所有涉及数字的事情都没有奏效,所以我把它删除了。
解决方案
最简单的方法是逐行遍历文件。像这样的东西:
package main
import (
"bufio"
"fmt"
"log"
"strconv"
"strings"
)
type Student struct {
FirstName string
LastName string
}
func main() {
fmt.Println("What is the name of your file?\n") var filename string
fmt.Scan(&filename)
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if len(line) == 0 {
// skip blank lines
continue
}
if '0' <= line[0] && line[0] <= '9' {
sum := 0
for _, field := range strings.Fields(line) {
n, err := strconv.Atoi(field)
if err != nil {
log.Fatal(err)
}
sum += n
}
fmt.Println(sum)
} else {
fields := strings.Fields(line)
if len(fields) != 2 {
log.Fatal("don't know how to get first name last name")
}
fmt.Println("First:", fields[0], "Last:", fields[1])
}
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
推荐阅读
- ajax - Asp.net core MVC 中的 Post Ajax 问题
- angular - Kendo DateTimePicker Angular 7 网格日期编辑器 TypeError:date.getTime 不是函数
- java - android - 为什么不为布局创建“绑定”
- javascript - 正则表达式替换两个选项之间的字符
- python - 未解决的导入'util'
- java - Thymeleaf 无法将 zoneddatetime 绑定到输入字段
- javascript - 如何在文件对话框中仅排除文件类型 .doc、.docx、.txt 和 .rtf 文件类型
- c++ - 用 Catch2 编译多个测试源的正确方法是什么?
- python - 有没有办法将大量上传数据直接从 /dev/urandom 流式传输到 AWS S3?
- unix - SED - 将字符串添加到 nginx 配置块的末尾