首頁 > 後端開發 > Golang > 主體

將文字檔案放入切片然後比較

WBOY
發布: 2024-02-06 11:06:10
轉載
579 人瀏覽過

將文字檔案放入切片然後比較

問題內容

我正在編寫一個程序,在 .txt 檔案中逐行取得使用者名,並驗證使用者名稱是否在其中。然後,我創建了一個切片並將文件轉換為字串並將其附加到字串切片中。我現在嘗試使用 for 循環遍歷切片,以查找文件中的用戶名,並將其與包含該用戶名的另一個字串變數進行比較。我想檢查一下它是否在切片中。做這個的最好方式是什麼?我嘗試使用切片的 for 循環將範圍內的元素與我想要檢查的用戶名的變數進行比較,但它不起作用。因此,換句話說,我想找出獲取一個txt 檔案的最佳方法,該檔案包含從上到下新增的使用者名稱列表,讓我的程式從該文字檔案中讀取(循環),並將其與將字串變數中的預定項目(使用者名稱)與文字檔案中的內容進行比較,並確定其是否符合。

使用者名稱(字串變數)==使用者名稱(文字檔案中)

*使用者名稱變數也將基於程式使用者輸入的內容。因此,我試圖最終檢查當使用者輸入使用者名稱時程式是否會驗證它是否在檔案中。謝謝。

我嘗試過的程式碼範例:

var readSystemCtl []string
readSystemCtl = append(readSystemCtl, string(file))
for _, username := range of readSystemCtl {
    if username == input {
        //Continue program if true 
        break
    }else {
        //Do something else
    }
}
登入後複製

注意: string(file) 是我要讀取的文字檔案; input 是使用者為其使用者名稱輸入的字串變量,該使用者名稱是在程式中預先決定的。


正確答案


身為 go 程式設計師,我很快就將您的整體應用需求翻譯成了 go 程式。然後我將其與您的程式碼進行了比較。我不明白為什麼你使用 go 切片的線性搜尋。為什麼不使用隨機存取 go 地圖?

在比較使用者名稱是否相等之前,請修剪空格 (strings.trimspace),並且為了不區分大小寫,將其轉換為小寫 (strings.tolower)。

users.go

#
package main

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

func loadusers(r io.reader) (map[string]bool, error) {
    users := make(map[string]bool)
    scnr := bufio.newscanner(r)
    for scnr.scan() {
        user := strings.trimspace(scnr.text())
        if len(user) > 0 {
            user = strings.tolower(user)
            users[user] = true
        }
    }
    if err := scnr.err(); err != nil {
        return nil, err
    }
    return users, nil
}

func loadusersfile(name string) (map[string]bool, error) {
    f, err := os.open(name)
    if err != nil {
        return nil, err
    }
    defer f.close()
    users, err := loadusers(f)
    if err != nil {
        return nil, err
    }
    return users, nil
}

func isuser(users map[string]bool, user string) bool {
    user = strings.trimspace(user)
    user = strings.tolower(user)
    return users[user]
}

func main() {
    users, err := loadusersfile("users.txt")
    if err != nil {
        fmt.fprintln(os.stderr, err)
        os.exit(1)
    }

    scnr := bufio.newscanner(os.stdin)
    for scnr.scan() {
        user := scnr.text()
        fmt.print("user: ", user)
        if isuser(users, user) {
            fmt.println(" found")
        } else {
            fmt.println(" not found")
        }
    }
    if err := scnr.err(); err != nil {
        fmt.fprintln(os.stderr, err)
        os.exit(1)
    }
}
登入後複製
$ cat users.txt
username1
Username2
UserName3
$ go build users.go
$ ./users
User Name X
User: User Name X not found
username3
User: username3 found
$
登入後複製

以上是將文字檔案放入切片然後比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!