go - Golang 扫描文本文件中的单词

标签 go text word scanning

我想将一个文本文件(file.txt)拆分为两个单独的大小相等的文本文件,例如 file1.txt 和 file2.txt。我在拆分中的策略是扫描单词并计算它们,然后将前半部分的单词写入 file1.txt,其余的写入 file2.txt
这是代码:

package main
import (
    "bufio"
    "fmt"
    "log"
    "os"
)
func main() {
    WordbyWordScan()
}
func WordbyWordScan() {
    file, err := os.Open("file.txt.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    scanner.Split(bufio.ScanWords)
    count := 0
    for scanner.Scan() {
        fmt.Println(scanner.Text())
        count++
    }
    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%d\n", count)
}

https://godoc.org/bufio#example-Scanner--Words

据我猜测,scanner.Scan() 返回一个 bool 值。在计算了单词的数量之后,如何在 Golang 中实现这样的代码,将前半部分的单词写入 file1.txt,其余的写入 file2.txt?

最佳答案

如果您想将文件切成两半,那么您已经完成了一半。数完单词后,只需返回并再次读取文件,将一半写入一个文件,一半写入另一个文件:

file.Seek(0,0)
scanner = bufio.NewScanner(file)
scanner.Split(bufio.ScanWords)
w:=0
for scanner.Scan() {
   var outfile *os.File
   if w<count/2 {
     outfile=file1
   } else {
     outfile=file2
   }
   fmt.Fprintln(outfile,scanner.Text())
   w++
}

以上,file1file2是两个输出文件。

如果您不需要将文件切成两半而只需将一半的单词放在一个文件中,另一半放在另一个文件中,您可以一次完成,无需计数。当您从第一个读取时,只需切换要写入的文件:
w:=0
for scanner.Scan() {
   var outfile *os.File
   if w%2==0 {
     outfile=file1
   } else {
     outfile=file2
   }
   fmt.Fprintln(outfile,scanner.Text())
   w++
}

关于go - Golang 扫描文本文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774117/

相关文章:

c - 纯 C 字符串替换整个单词

mysql - 使用 MySQL 查询计算文本列中具有许多 ID 的确定词

html-parsing - 我如何获取 html.Node 的内容

go - 如何在运行 'go test' 时排除或跳过特定目录

webserver - 从根目录提供主页和静态内容

python Selenium : Get dynamic update of text of an element

python - 将 .doc/.docx 转换为保留表格的文本

javascript - Firefox 笔划文本锯齿状伪影

php - 正则表达式php从不同组中的字符串中分离出一个确切的单词

go - == true 已评估但未使用