《Go程序设计语言》练习1.4:修改dup2程序,输出出现重复行的文件的名称

该代码示例展示了两个版本的Go程序,原始dup2用于统计输入流或文件中行的出现次数。修改后的dup2在处理每个文件后立即输出重复行,并清空计数器以备处理下一个文件。主要功能包括使用bufio.Scanner读取文件,计数并检测行重复。
摘要由CSDN通过智能技术生成

原始dup2

 

package main

func main() {
counts := make(map[string]int)
files := os.Args[1:]

if len(files) == 0 {
countLines(os.Stdin, counts)
} else {
for _, arg := range files {
f, err := os.Open(arg)
if err != nil {
fmt.Fprintf(os.Stderr, "dup2: %v\n", err)
continue
}

countLines(f, counts)
f.Close()
}
}
for line, n := range counts {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
}

func countLines(f *os.File, counts map[string]int) {
input := bufio.NewScanner(f)

// fmt.Println("222test")

for input.Scan() {
counts[input.Text()]++
}
}

修改后dup2

package main

import (
"bufio"
"fmt"
"os"
)

func countLines(f *os.File, counts map[string]int) {
input := bufio.NewScanner(f)

for input.Scan() {
counts[input.Text()]++
}
}

func main() {
counts := make(map[string]int)
files := os.Args[1:]

if len(files) == 0 {
countLines(os.Stdin, counts)
} else {
for _, arg := range files {
f, err := os.Open(arg)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
continue
}

countLines(f, counts)

for _, n := range counts {
if n > 1 {
fmt.Printf("%s\n", arg)
break
}
}
counts = make(map[string]int) //清空counts,以便对下一个文件进行判断

f.Close()
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值