Rumah >pembangunan bahagian belakang >Golang >Fscanf dan mengetepikan medan seperti dalam C

Fscanf dan mengetepikan medan seperti dalam C

WBOY
WBOYke hadapan
2024-02-12 16:18:051181semak imbas

Fscanf 并像 C 中那样省略字段

Kandungan soalan

Adakah mungkin untuk meninggalkan medan %*s seperti dalam C?

var pid int
fmt.Fscanf(r, "%*s %d", &pid)

Penyelesaian

Sebenarnya, anda tidak boleh melakukan ini dalam Go (sekurang-kurangnya pada Go 1.21.0).

Kod sumber menunjukkan:

  • Tiada kata kerja medan yang ditinggalkan dalam rentetan format (seperti %*s):实际上,字符串的动词始终是 单个字符 (% s%v%q%X%X dalam bahasa C): sebenarnya, kata kerja rentetan itu sentiasa Tunggal aksara
  • (% s, %v, %q, %X atau %X)
  • Fscanf 方法 迭代参数a 中的 Fscanf 数组(r io.Reader,格式字符串,a ...any))。因此,您必须aFscanf
  • KaedahBerulangParameter /strong>
(tatasusunan Fscanf(r io.Reader, rentetan format, a...mana-mana) dalam <code>a). Oleh itu, anda mesti mentakrifkan parameter dalam a walaupun anda tidak mengambil berat tentang nilainya

Jika anda tidak mahu mentakrifkan pembolehubah, anda boleh menggunakan:

var pid int
fmt.Fscanf(r, "%s %d", new(string), &pid)

Alternatif lainio.ReadAll

Untuk kes khusus anda, untuk menghuraikan sesuatu dalam pembaca, anda boleh membaca pembaca terlebih dahulu ke dalam rentetan (cth.

): strings.Split CB835C294C06824721603abd255bd78a

Kemudian gunakan kaedah
    atau ungkapan biasa, contohnya:
  1. strings.Split
  2. dengan
  1. pidString := strings.Split(string(s), " ")[1]
    pid, err := strconv.Atoi(pidString)
    if err != nil {
        panic(err) // handle the error
    }
    
Gunakan ungkapan biasa:

re := regexp.MustCompile(`[^\s]+ (?P<pid>\d+)`) // similar to "%s %d"
matches := re.FindStringSubmatch(s)
pidString := matches[re.SubexpIndex("pid")]
pid, err := strconv.Atoi(pidString)
if err != nil {
    panic(err) // handle the error
}
🎜Mungkin ada cara lain, tetapi ini sudah memadai. Semoga membantu. 🎜

Atas ialah kandungan terperinci Fscanf dan mengetepikan medan seperti dalam C. 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