Golang程序 计算文件中存在的行数
在Go编程语言中,文件是一种命名的资源,用于存储数据,可以从中读取或写入。它为程序提供了一种保存数据的方法,即使在程序执行完毕后也是如此。在这篇文章中,我们将讨论不同的方法,利用这些方法我们可以计算文件中的行数。
方法1:使用一个用户定义的函数
在这个方法中,我们将写一个go语言程序,通过使用bufio、fmt和os包来计算文件中的行数。
算法
- 第1步 – 首先,我们需要导入fmt、bufio和os包。
-
第2步 – 现在,启动主函数。在main()中创建一个新的文件,并将其存储在一个变量中。
-
第3步 – 如果在此过程中发生任何错误,那么将其存储在一个名为err的变量中,并将其打印在屏幕上。
-
第4步 – 现在,为了向这个文件写入内容,使用Bufio包中的NewWriter()函数,并使用另一个函数WriteString()来向文件输入字符串值。
-
第5步 – 现在,使用Open()函数打开文件,并使用scan()函数来读取文件中的数据。
-
第6步 – 再次使用for循环来迭代文件中的数据,并在每次获取新行时增加计数变量。
-
第7步 – 一旦迭代完成,count变量就包含了该文件中的行数。
-
第8步 – 最后,我们需要使用fmt.Println()函数在屏幕上打印这个结果。
例子1
在下面的例子中,我们将使用用户定义的函数来计算文件中的行数
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// creating a new file
file, err := os.Create("newFile.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// writing data in the file
writer := bufio.NewWriter(file)
_, err = writer.WriteString("Hello, World!\n this is the first line\n followed by the second line\n and the third one")
if err != nil {
fmt.Println(err)
return
}
err = writer.Flush()
if err != nil {
fmt.Println(err)
return
}
// fetching the file
file, err = os.Open("newFile.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
// getting the number of lines
var count int
for scanner.Scan() {
count++
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
return
}
fmt.Println("Number of lines in file:", count)
}
输出
Number of lines in file: 4
方法2:通过使用内部函数
在这个方法中,我们将写一个go语言程序,通过使用内部库函数来计算一个文件中的行数。
语法
func len(v Type) int
len()函数是用来获取任何参数的长度的。它将一个参数作为我们希望找到其长度的数据类型变量,并返回该变量长度的整数值。
func Split(str, sep string) []string
Split()函数用于通过提供的分隔符来分割一个字符串。这个函数存在于strings包中,它接受要分割的字符串和分隔符作为一个参数。然后,该函数返回最终的字符串数组作为结果。
算法
- 第1步 – 首先,我们需要导入所需的包。
-
第2步 – 现在,启动主函数。在main()里面创建一个新文件,并将其存储在一个变量中。
-
第3步 – 现在,为了写入这个文件,使用函数WriteString()并输入字符串值到文件中。
-
第4步 – 现在,使用ioutil软件包中的ReadFile()函数打开文件,读取文件中的数据。
-
第5步 – 使用split()函数计算行数并将其打印在屏幕上。
例子1
在这个例子中,我们将学习如何使用内部函数,如 writestring() 来计算文件中的行数。
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
// creating a new file
file, err := os.Create("newFile.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// writing data in the file
writer := bufio.NewWriter(file)
_, err = writer.WriteString("Hello, World!\n this is the first line\n followed by the second line\n and the third one\n and a new one")
if err != nil {
fmt.Println(err)
return
}
err = writer.Flush()
if err != nil {
fmt.Println(err)
return
}
// fetching the file
data, err := ioutil.ReadFile("newFile.txt")
if err != nil {
panic(err)
}
lines := strings.Split(string(data), "\n")
fmt.Printf("Number of lines: %d\n", len(lines))
}
输出
Number of lines: 5
例子2
在这个例子中,我们使用了 reader 包中的 ReadLine() 内置库函数,来编写一个 go 语言程序来计算一个给定文件的行数。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// creating a new file
file, err := os.Create("newFile.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// writing data in the file
writer := bufio.NewWriter(file)
_, err = writer.WriteString("Hello, World!\n this is the first line\n followed by the second line\n and the third one\n and a new one")
if err != nil {
fmt.Println(err)
return
}
err = writer.Flush()
if err != nil {
fmt.Println(err)
return
}
file, err = os.Open("newFile.txt")
if err != nil {
panic(err)
}
defer file.Close()
reader := bufio.NewReader(file)
lineCount := 0
for {
_, _, err := reader.ReadLine()
if err != nil {
break
}
lineCount++
}
fmt.Printf("Number of lines: %d\n", lineCount)
}
输出
Number of lines: 5
结论
在第一个例子中,我们使用了一个使用定义的函数,而在第二个方法中,我们使用了两个内部函数的例子来计算一个文件中存在的行数