I am writing a program to get usernames line by line in a .txt file and verify that the username is in it. Then I created a slice and converted the file to a string and appended it to the string slice. I'm now trying to use a for loop to iterate through the slice to find the username in the file and compare it to another string variable containing the username. I want to check if it is in the slice. What's the best way to do this? I tried using a sliced for loop to compare the elements in the range to the variable for the username I wanted to check, but it didn't work. So, in other words, I want to figure out the best way to get a txt file containing a list of usernames added from top to bottom, have my program read (loop) from that text file, and put it Compares a predetermined item (username) in a string variable to the contents of a text file and determines whether it matches.
Username (string variable) == username (in text file)
*The username variable will also be based on what the program user enters. So I'm trying to ultimately check if when the user enters their username the program will verify if it is in the file. Thanks.
Code examples I tried:
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 } }
Note: string(file) is the text file I want to read; input is the string variable entered by the user for their username, which is predetermined in the program.
As a go programmer, I quickly translated your overall application requirements into go programs. Then I compared it with your code. I don't understand why you use go for linear search of slices. Why not use random access go maps?
Before comparing usernames for equality, trim spaces (strings.trimspace
) and, to be case-insensitive, convert them to lowercase (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 $
The above is the detailed content of Put text files into slices then compare. For more information, please follow other related articles on the PHP Chinese website!