iT邦幫忙

3

蠻可愛的golang #38 基本輸出入介紹之讀取壓縮檔

  • 分享至 

  • xImage
  •  

遇到壓縮檔,在所難免,看看怎樣讀出來.

// hello43
package main

import (
	"bufio"
	"compress/gzip"
	"fmt"
	"io"
	"os"
)

func main() {
	// 開檔
	inputFile, Error := os.Open("input.txt.gz")
	// 判斷是否開檔錯誤
	if Error != nil {
		fmt.Println("開檔錯誤!")
		return
	}
	// 離開時自動執行關檔
	defer inputFile.Close()
	// 宣告行計數器
	cnt := 1

	fz, Error := gzip.NewReader(inputFile)
	if Error != nil {
		fmt.Println("Gzip 錯誤!")
	}

	inputReader := bufio.NewReader(fz)

	// 用迴圈讀取檔案內容
	for {
		// 讀取字串直到遇到跳行符號
		inputString, Error := inputReader.ReadString('\n')
		// 若到檔尾時分發生  io.EOF 錯誤
		// 根據此錯誤 判斷是否離開
		if Error == io.EOF {
			fmt.Println("已讀取到檔尾!!")
			return
		}
		// 列印內容
		fmt.Printf("第%2d行:%s\n", cnt, inputString)
		cnt++
	}
}

執行結果:

λ ./hello43 
第 1行:玉面飛鷹倒拔垂楊柳 豹子頭誤入白虎堂

第 2行:林教頭刺配滄州道  玉面飛鷹大鬧野豬林

已讀取到檔尾!!

程式跟昨天的幾乎一樣,只是將

inputReader := bufio.NewReader(inputFile)

變成

fz, Error := gzip.NewReader(inputFile)
	if Error != nil {
		fmt.Println("Gzip 錯誤!")
	}

inputReader := bufio.NewReader(fz)

當然還有 import "compress/gzip"

甚至我們還可以把 Error 處理部份拿掉,不過沒必要那樣精簡.


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
賽門
iT邦超人 1 級 ‧ 2014-08-21 16:38:20

小雨正在進行鐵人賽熱身賽...拍手

0
總裁
iT邦好手 1 級 ‧ 2014-08-21 16:44:28

如果是別的鬼壓縮的,就要找到對應的鬼囉??..疑惑

總裁正解!

外獅佬 iT邦大師 1 級 ‧ 2014-08-21 16:59:49 檢舉

iT邦幫忙MVPcdfu提到:
如果是別的鬼壓的,就要找到對應的鬼囉??

對啊...要找對負責的鬼偷笑

我要留言

立即登入留言