Go amalan bahasa: Bagaimana untuk mengisih kandungan bahagian tertentu fail melalui modul SectionReader?
Pengenalan:
Dalam pembangunan harian, kita sering menghadapi situasi di mana kita perlu mengisih bahagian tertentu fail. Dalam bahasa Go, kita boleh melaksanakan fungsi ini melalui modul SectionReader. Artikel ini akan memperkenalkan cara menggunakan modul SectionReader untuk mengisih kandungan bahagian tertentu fail dan melampirkan contoh kod yang sepadan.
1. Pengenalan kepada modul SectionReader
SectionReader ialah modul dalam pustaka standard bahasa Go Ia boleh menghiris Pembaca dan hanya membaca data dalam julat tertentu. Ia ditakrifkan seperti berikut:
type SectionReader struct {
r io.ReaderAt base int64 size int64
}
di mana, r ialah Pembaca yang akan dikendalikan, tapak ialah kedudukan untuk mula membaca, dan saiz ialah panjang untuk dibaca. SectionReader melaksanakan io.Reader, io.ReaderAt, io.WriterTo, io.Seeker dan antara muka yang lebih dekat, yang boleh melaksanakan operasi seperti membaca, menulis dan meletakkan kedudukan dengan mudah. . objek dan tambah fail yang perlu diisih Diluluskan sebagai Pembaca.
fail, err := os.Open("filename.txt")
log.Fatal(err)
section := io.NewSectionReader (fail, mula, saiz)
Baca kandungan bahagian yang dinyatakan
Seterusnya, kita boleh menggunakan kaedah SectionReader.Read untuk membaca kandungan bahagian yang dinyatakan. Kaedah Baca menerima kepingan bait sebagai parameter dan mengembalikan bilangan bait sebenar yang dibaca.
buffer := make([]bait, section.Size())
log.Fatal(err)
Uraikan kandungan mengikut keperluan untuk diisih Struktur
Selepas membaca kandungan, kita perlu menghuraikannya ke dalam struktur yang perlu diisih, seperti kepingan yang mengandungi berbilang elemen.
var data []string
data = strings.Split(string(buffer[:n]), "
isih.Strings(data)
_, err = section.WriteTo(file)
if err != nil {log.Fatal(err)
package main import ( "io" "log" "os" "sort" "strings" ) func main() { // 打开文件 file, err := os.Open("filename.txt") if err != nil { log.Fatal(err) } defer file.Close() // 创建SectionReader对象 section := io.NewSectionReader(file, start, size) // 读取指定部分内容 buffer := make([]byte, section.Size()) n, err := section.Read(buffer) if err != nil { log.Fatal(err) } // 解析内容为需要排序的结构 var data []string data = strings.Split(string(buffer[:n]), " ") // 对内容进行排序 sort.Strings(data) // 将排序后的内容写回文件 _, err = section.WriteTo(file) if err != nil { log.Fatal(err) } }
Atas ialah kandungan terperinci Pergi amalan bahasa: Bagaimana untuk mengisih kandungan bahagian tertentu fail melalui modul SectionReader?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!