Go 語言程式逐行讀取檔案內容


在 Go 語言中,有各種內部包,如 bufio、os 和 io,可用於逐行讀取檔案內容。bufio 和 os 包用於使用 os.open 和 bufio.NewScanner 函式開啟和掃描檔案。我們將使用 io 包中的 ioutil.ReadFile 函式來讀取指定位置的檔案,並使用字串函式將其顯示在輸出中。

方法 1:使用 bufio 和 os 包

在本例中,bufio.NewScanner 用於逐行讀取內容,os.Open 用於開啟檔案。只要有行要讀取並且存在掃描器,scan 方法就會返回 true。當前讀取的行由 text 返回。函式返回時,檔案將使用 defer 語句關閉。

語法

os.Open

此函式是 os 包的一部分。它用於開啟一個檔案進行讀取。它接受一個輸入,即要開啟的檔名。

bufio.NewScanner

此函式是 bufio 包的一部分。它用於建立一個掃描器物件來讀取檔案中的資料。

演算法

  • 步驟 1 − 建立一個 package main 並宣告 fmt(格式化包)、bufio 和 os 包在程式中,其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。

  • 步驟 2 − 建立一個 main 函式,並在該函式中使用 os 包中的 os.Open 函式開啟要讀取內容的檔案。

  • 步驟 3 − 如果在開啟檔案時出現錯誤,則在控制檯上列印錯誤並返回。

  • 步驟 4 − 使用 defer 關鍵字和 close 函式關閉已開啟的檔案。

  • 步驟 5 − 使用檔案作為引數在其中建立一個 bufio.NewScanner 物件,並透過迭代檔案行逐行讀取內容。

  • 步驟 6 − 迭代中使用的條件將是,直到檔案中存在一行,讀取並列印它,否則使用 scanner.Scan() 函式終止迴圈。

  • 步驟 7 − 但如果在掃描時出現錯誤,則使用 fmt.Println() 在控制檯上列印錯誤

示例

在本例中,我們將使用掃描器逐行讀取檔案內容。

package main
import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	myfile, err := os.Open("file1.txt")  //open the file
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer myfile.Close()

	scanner := bufio.NewScanner(myfile)  //scan the contents of a file and print line by line
	for scanner.Scan() {
		line := scanner.Text()
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		fmt.Println("Error reading from file:", err) //print error if scanning is not done properly
	}
}

輸出

line 1
line 2
line 3

方法 2:使用 io/ioutil 和 strings 包

此例項使用 ioutil.ReadFile 將檔案的內容讀取到記憶體中作為 []bytes,使用該函式。然後使用 string 函式和 strings 將內容轉換為字串。使用 Split 函式將字串分割成多行,每行用換行符分隔。之後,for 迴圈在遍歷行後列印每一行。

語法

Ioutil.ReadFile

此函式在 ioutil 包中可用,用於讀取檔案的內容,檔名作為函式的輸入

演算法

  • 步驟 1 − 建立一個 package main 並宣告 fmt(格式化包)、io/ioutil 和 strings 包在程式中,其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。

  • 步驟 2 − 建立一個 main 函式,並在該函式中使用 ioutil.ReadFile 函式讀取檔案 file1.txt。

  • 步驟 3 − 如果在讀取檔案時出現錯誤,則列印錯誤並返回。

  • 步驟 4 − 使用 strings.Split 函式使用 \n 分割資料。

  • 步驟 5 − 迭代已分割的字串,逐行列印內容。

  • 步驟 6 − 列印語句使用 fmt.Println() 函式執行,其中 ln 表示換行。

示例

在本例中,我們將使用 io 包中的 ioutil.ReadFile 函式。

package main
import (
   "fmt"
   "io/ioutil"
   "strings"
)

func main() {
   data, err := ioutil.ReadFile("file1.txt")  //read the file 
   if err != nil {
      fmt.Println("Error reading file:", err) //print the error if comes while reading file 
      return
   }
   read_lines := strings.Split(string(data), "\n")
   for _, line := range read_lines {
      fmt.Println(line) //print the content line by line
   }
}

輸出

line 1
line 2
line 3

結論

我們使用兩個示例執行了逐行讀取檔案內容的程式。在第一個示例中,將使用 bufio 和 os 包,在第二個示例中,將使用 io/ioutil 包。

更新於: 2023年2月22日

3K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告