Ich schreibe ein Programm, um Benutzernamen Zeile für Zeile in einer TXT-Datei abzurufen und zu überprüfen, ob der Benutzername darin enthalten ist. Dann habe ich ein Slice erstellt, die Datei in einen String konvertiert und an den String-Slice angehängt. Ich versuche jetzt, das Slice mithilfe einer for-Schleife zu durchlaufen, um den Benutzernamen in der Datei zu finden und ihn mit einer anderen Zeichenfolgenvariablen zu vergleichen, die den Benutzernamen enthält. Ich möchte überprüfen, ob es im Slice ist. Wie geht das am besten? Ich habe versucht, eine segmentierte for-Schleife zu verwenden, um die Elemente im Bereich mit der Variablen für den Benutzernamen zu vergleichen, den ich überprüfen wollte, aber es hat nicht funktioniert. Mit anderen Worten, ich möchte herausfinden, wie ich am besten eine TXT-Datei mit einer von oben nach unten hinzugefügten Liste von Benutzernamen erhalten kann, mein Programm aus dieser Textdatei lesen (in einer Schleife) veranlassen und sie mit einem vorgegebenen Element vergleichen kann ( Benutzername) in einer String-Variablen mit dem Inhalt einer Textdatei verknüpft und ermittelt, ob dieser übereinstimmt.
Benutzername (String-Variable) == Benutzername (in Textdatei)
* Die Variable „Benutzername“ basiert ebenfalls auf den Eingaben des Programmbenutzers. Daher versuche ich letztendlich zu überprüfen, ob das Programm überprüft, ob der Benutzername in der Datei enthalten ist, wenn er seinen Benutzernamen eingibt. Danke.
Beispiel für Code, den ich ausprobiert habe:
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 } }
Hinweis: string(file) ist die Textdatei, die ich lesen möchte; input ist die String-Variable, die der Benutzer für seinen im Programm vorgegebenen Benutzernamen eingibt.
Als Go-Programmierer übersetze ich Ihre allgemeinen Anwendungsanforderungen schnell in Go-Programme. Dann habe ich es mit Ihrem Code verglichen. Ich verstehe nicht, warum Sie go für die lineare Suche nach Slices verwenden. Warum nicht Go-Maps mit wahlfreiem Zugriff verwenden?
Entfernen Sie Leerzeichen (strings.trimspace
),并且为了不区分大小写,将其转换为小写 (strings.tolower
), bevor Sie Benutzernamen auf Gleichheit vergleichen.
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 $
Das obige ist der detaillierte Inhalt vonTeilen Sie Textdateien in Slices auf und vergleichen Sie sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!