Loops 如何在数数数字的同时循环遍历包含多个数字的行的文本文件
该文件看起来像:Loops 如何在数数数字的同时循环遍历包含多个数字的行的文本文件,loops,go,Loops,Go,该文件看起来像: John Smith 100 90 80 90 50 60 80 99 40 20 但是文件中可以有任意数量的人/等级。我知道如何循环并获得此人的名字和姓氏,但如何循环第一行数字,将其添加到自己的总数中,然后循环第二行并将其添加到另一个总数中 我还没有找到一种方法来检查围棋中一行的结尾,所以我不知道如何区分第一行数字和第二行数字 这就是我尝试过的: package main import ( "fmt" "os" "log" "bufio"
John Smith
100 90 80 90
50 60 80 99 40 20
但是文件中可以有任意数量的人/等级。我知道如何循环并获得此人的名字和姓氏,但如何循环第一行数字,将其添加到自己的总数中,然后循环第二行并将其添加到另一个总数中
我还没有找到一种方法来检查围棋中一行的结尾,所以我不知道如何区分第一行数字和第二行数字
这就是我尝试过的:
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)
}
}
主程序包
进口(
“布菲奥”
“fmt”
“日志”
“strconv”
“字符串”
)
类型学生结构{
名字字符串
姓氏字符串
}
func main(){
fmt.Println(“文件名是什么?\n”)变量文件名字符串
fmt.Scan(&文件名)
文件,错误:=os.Open(文件名)
如果错误!=零{
log.Fatal(错误)
}
扫描程序:=bufio.NewScanner(文件)
对于scanner.Scan(){
行:=scanner.Text()
如果len(line)==0{
//跳过空行
持续
}
如果“0”,最简单的方法是逐行循环文件。类似如下:
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)
}
}
主程序包
进口(
“布菲奥”
“fmt”
“日志”
“strconv”
“字符串”
)
类型学生结构{
名字字符串
姓氏字符串
}
func main(){
fmt.Println(“文件名是什么?\n”)变量文件名字符串
fmt.Scan(&文件名)
文件,错误:=os.Open(文件名)
如果错误!=零{
log.Fatal(错误)
}
扫描程序:=bufio.NewScanner(文件)
对于scanner.Scan(){
行:=scanner.Text()
如果len(line)==0{
//跳过空行
持续
}
如果“0”显示您到目前为止尝试过的内容。@CeriseLimón编辑了它。我尝试了更多,但没有效果,这只是一种测试。显示您到目前为止尝试过的内容。@CeriseLimón编辑了它。我尝试了更多,但没有效果,这只是一种测试。哇,这看起来很棒。非常感谢。我几乎完成了这个精确的任务在java之前,但我只是在努力学习围棋。再次感谢。哇,这看起来很棒。非常感谢。我以前在java中做过几乎完全相同的作业,但我只是在努力学习围棋。再次感谢