gpt4 book ai didi

go - 比较文本文件的列

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:49 24 4
gpt4 key购买 nike

我需要一些关于这段代码的建议。我正在用 Go 开发一个应用程序来逐行读取文件的内容,并将由散列形成的特定列与同一文件中的其他列进行比较。我正在尝试将不同的哈希值捕获到同一文件名,并收到文件已更改的警报。

这是文本文件的示例。每行由文件名、哈希和计算机名组成:

c:\program files\internet explorer\iexplore.exe;0f3c97716fed8b554a7ec0464d50719f;computer1
c:\program files (x86)\google\chrome\application\chrome.exe;d387a06cd4bf5fcc1b50c3882f41a44e;computer1
c:\windows\system32\notepad.exe;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;computer1
c:\program files\internet explorer\iexplore.exe;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB;computer1
c:\program files (x86)\google\chrome\application\chrome.exe;d387a06cd4bf5fcc1b50c3882f41a44e;computer1
c:\windows\system32\notepad.exe;f60a9d3a9461f68de0fccebb0c6cb31a;computer1

运行代码时,我得到了两次相同的信息,因为我使用了两次。显然,我只需要每个出现一次。结果:

go run main.go 
Original: c:\program files\internet explorer\iexplore.exe 0f3c97716fed8b554a7ec0464d50719f computer1
Violation: c:\program files\internet explorer\iexplore.exe BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB computer1
------
Original: c:\windows\system32\notepad.exe AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA computer1
Violation: c:\windows\system32\notepad.exe f60a9d3a9461f68de0fccebb0c6cb31a computer1
------
Original: c:\program files\internet explorer\iexplore.exe BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB computer1
Violation: c:\program files\internet explorer\iexplore.exe 0f3c97716fed8b554a7ec0464d50719f computer1
------
Original: c:\windows\system32\notepad.exe f60a9d3a9461f68de0fccebb0c6cb31a computer1
Violation: c:\windows\system32\notepad.exe AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA computer1
------
IGNORE THIS LINE []
IGNORE THIS LINE []

预期结果:

c:\program files\internet explorer\iexplore.exe;0f3c97716fed8b554a7ec0464d50719f;computer1
c:\program files\internet explorer\iexplore.exe;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB;computer1

c:\windows\system32\notepad.exe;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;computer1
c:\windows\system32\notepad.exe;f60a9d3a9461f68de0fccebb0c6cb31a;computer1

我尝试了 break、continue、variables 等,但我认为我在只报告一次事件的逻辑上遇到了问题。

这是代码(最后):

package main

import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)

const (
FILE_DIR = "./logs/"
)

func main() {

p := fmt.Println

// List and open all log files
listOfFiles := listDirFiles(FILE_DIR)
for _, file := range listOfFiles {

f, err := os.Open(FILE_DIR + file)
if err != nil {
p("Error when opening the file " + FILE_DIR + file + " .")
break
}
defer f.Close()

var lines []string
scanner := bufio.NewScanner(f)
for scanner.Scan() {
lines = append(lines, scanner.Text()) // Converting the content of a file into a slice
}

results := testViolation(lines)
fmt.Println("IGNORE THIS LINE", results)
}

}

func testViolation(lines []string) []string {
var splitLine []string

for _, f := range lines {
splitLine = strings.Split(f, ";")

for _, c := range lines {
checkLine := strings.Split(c, ";")
if splitLine[0] == checkLine[0] && splitLine[2] == checkLine[2] && splitLine[1] != checkLine[1] {
fmt.Println("Original: ", splitLine[0], splitLine[1], splitLine[2])
fmt.Println("Violation: ", checkLine[0], checkLine[1], checkLine[2])
fmt.Println("------")
}
}
}
return nil
}

func listDirFiles(dir string) []string {

var filesString []string
files, _ := ioutil.ReadDir(dir)

// Convert []os.FileInfo into []string to return
for _, f := range files {
filesString = append(filesString, f.Name())
}
return filesString
}

非常感谢您的帮助。

马里奥。

最佳答案

使用 map[string]string(例如 mapName[computerName+fileName] = fileHashvalue,对于每一行检查给定计算机和文件名(连接的字符串 - computerName + fileName)的映射条目是否存在,如果存在则与现有的哈希值)你可以在一个范围循环中而不是你现在使用的两个范围循环中做到这一点。希望这会有所帮助。

关于go - 比较文本文件的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com