Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Letakkan fail teks ke dalam kepingan kemudian bandingkan

Letakkan fail teks ke dalam kepingan kemudian bandingkan

WBOY
WBOYke hadapan
2024-02-06 11:06:10560semak imbas

Letakkan fail teks ke dalam kepingan kemudian bandingkan

Kandungan soalan

Saya sedang menulis program untuk mendapatkan nama pengguna baris demi baris dalam fail .txt dan sahkan sama ada nama pengguna ada di dalamnya. Kemudian saya mencipta kepingan dan menukar fail itu kepada rentetan dan melampirkannya pada kepingan rentetan. Saya kini cuba menggunakan gelung for untuk melelaran melalui kepingan untuk mencari nama pengguna dalam fail dan membandingkannya dengan pembolehubah rentetan lain yang mengandungi nama pengguna. Saya ingin menyemak sama ada ia berada dalam kepingan. Apakah cara terbaik untuk melakukan ini? Saya cuba menggunakan gelung yang dihiris untuk membandingkan elemen dalam julat dengan pembolehubah untuk nama pengguna yang saya ingin periksa, tetapi ia tidak berfungsi. Jadi, dengan kata lain, saya ingin memikirkan cara terbaik untuk mendapatkan fail txt yang mengandungi senarai nama pengguna yang ditambahkan dari atas ke bawah, minta program saya membaca (gelung) daripada fail teks itu, dan meletakkannya Membandingkan item yang telah ditetapkan ( nama pengguna) dalam pembolehubah rentetan kepada kandungan fail teks dan menentukan sama ada ia sepadan.

Nama pengguna (pembolehubah rentetan) == nama pengguna (dalam fail teks)

* Pembolehubah nama pengguna juga akan berdasarkan apa yang dimasukkan oleh pengguna program. Jadi saya cuba akhirnya menyemak sama ada apabila pengguna memasukkan nama pengguna mereka, program akan mengesahkan sama ada ia berada dalam fail. Terima kasih.

Contoh kod yang saya cuba:

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
    }
}

Nota: string(fail) ialah fail teks yang saya ingin baca; input ialah pembolehubah rentetan yang pengguna masukkan untuk nama pengguna mereka, yang telah ditetapkan dalam program.


Jawapan betul


Sebagai pengaturcara go, saya cepat menterjemahkan keseluruhan keperluan permohonan anda ke dalam program go. Kemudian saya membandingkannya dengan kod anda. Saya tidak faham mengapa anda menggunakan go untuk carian linear kepingan. Mengapa tidak menggunakan akses rawak go maps?

Pangkas ruang (strings.trimspace),并且为了不区分大小写,将其转换为小写 (strings.tolower) sebelum membandingkan nama pengguna untuk kesaksamaan.

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
$

Atas ialah kandungan terperinci Letakkan fail teks ke dalam kepingan kemudian bandingkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam