1. 程式人生 > >go語言實現篩選數據

go語言實現篩選數據

return time nil clas neu reg exp art open

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
    "regexp"
    "strings"
)

func main() {
    fileName := "log.log"
    file, err := os.OpenFile(fileName, os.O_RDWR, 0666)
    if err != nil {
        fmt.Println("Open file error!", err)
        return
    }
    defer file.Close()

    stat, err :
= file.Stat() if err != nil { panic(err) } var size = stat.Size() fmt.Println("file size=", size) buf := bufio.NewReader(file) f, err := os.Create("篩選的數據.txt") defer f.Close() for { line, err := buf.ReadString(\n) line = strings.TrimSpace(line) go findLine(line)
if err != nil { if err == io.EOF { fmt.Println("File read ok!") break } else { fmt.Println("Read file error!", err) return } } } } func findLine(line string) { str := line ipret :
= regexp.MustCompile(`([0-9]{1,3}\.){3}[0-9]{1,3}`) timeret := regexp.MustCompile(`\[(.+)\]`) articleret := regexp.MustCompile(`http://www.neusoft.com/article/[0-9]{1,4}`) videoret := regexp.MustCompile(`http://www.neusoft.com/video/[0-9]{1,4}`) ip := ipret.FindAllStringSubmatch(str, -1) time := timeret.FindAllStringSubmatch(str, -1) article := articleret.FindAllStringSubmatch(str, -1) video := videoret.FindAllStringSubmatch(str, -1) f, err := os.OpenFile("篩選的數據.txt", os.O_WRONLY, 0644) if err != nil { fmt.Println("cacheFileList.yml file create failed. err: " + err.Error()) } else { /*fmt.Println("all:", alls)*/ /*fmt.Println("all:", alls)*/ if ip != nil { n, _ := f.Seek(0, os.SEEK_END) // 從末尾的偏移量開始寫入內容 _, err = f.WriteAt([]byte("ip:\t"+ip[0][0]+"/t"), n) fmt.Printf("ip:%s\t", ip[0][0]) } for _, one := range time { n, _ := f.Seek(0, os.SEEK_END) // 從末尾的偏移量開始寫入內容 _, err = f.WriteAt([]byte("time:\t"+one[0]+"/t"), n) fmt.Printf("時間:%s\t", one[0]) } for _, one := range article { n, _ := f.Seek(0, os.SEEK_END) // 從末尾的偏移量開始寫入內容 _, err = f.WriteAt([]byte("article:\t"+one[0]+"/t"), n) fmt.Printf("時間:%s\t", one[0]) } for _, one := range video { n, _ := f.Seek(0, os.SEEK_END) // 從末尾的偏移量開始寫入內容 _, err = f.WriteAt([]byte("video:\t"+one[0]+"/t"), n) fmt.Printf("時間:%s\t", one[0]) } n, _ := f.Seek(0, os.SEEK_END) _, err = f.WriteAt([]byte("\n"), n) } }

go語言實現篩選數據