Golang 计算文件中的行数

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 - 一旦迭代完成,计数变量包含该特定文件中的行数。

  • 步骤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()函数用于通过提供的分隔符拆分字符串。该函数存在于字符串包中,并接受要拆分的字符串作为参数以及一个分隔符。然后,该函数将返回最终的字符串数组作为结果。

步骤

  • 第一步 - 首先,我们需要导入所需的包。

  • 第二步 - 现在,开始主函数。在main()中创建一个新文件并将其存储在一个变量中。

  • 第三步 - 现在,为了向该文件写入内容,请使用WriteString()函数并输入字符串值到文件中。

  • 第四步 - 现在,使用ioutil包中的ReadFile()函数打开文件以读取文件中的数据。

  • 第五步 - 使用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

结论

在第一个示例中,我们使用了一个用户定义的函数,而在第二种方法中,我们使用了两个内部函数的示例来计算文件中存在的行数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程