Rumah >pembangunan bahagian belakang >Golang >Pergi amalan bahasa: Bagaimana untuk mengisih kandungan bahagian tertentu fail melalui modul SectionReader?

Pergi amalan bahasa: Bagaimana untuk mengisih kandungan bahagian tertentu fail melalui modul SectionReader?

WBOY
WBOYasal
2023-07-22 19:13:121161semak imbas

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")

if err != nil {
    log.Fatal(err)
  1. }
    tunda fail.Close()
// Cipta objek SectionReader

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())

n, err := section.Read(buffer)
    if err != nol {
  1. 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]), "
    ")

  1. Isih kandungan
Seterusnya, kita boleh menggunakan fungsi Isih untuk mengisih unsur-unsur dalam kepingan Isih.



isih.Strings(data)

  1. Tulis kandungan yang diisih kembali ke fail
    Akhir sekali, kami menulis kandungan yang diisih kembali ke fail, yang boleh dicapai menggunakan kaedah SectionReader.WriteTo.

_, err = section.WriteTo(file)

if err != nil {
    log.Fatal(err)
  1. }
  2. 3 Contoh Kod
Berikut ialah contoh kod lengkap yang menunjukkan cara menggunakan modul SectionReader untuk melaksanakan yang ditentukan. sebahagian daripada fail Isih kandungan.

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

Ringkasan:

Melalui modul SectionReader, kita boleh menyusun bahagian fail yang ditentukan dengan mudah. Artikel ini memperkenalkan penggunaan asas modul SectionReader dan memberikan kod sampel lengkap. Saya harap artikel ini dapat membantu anda menggunakan modul SectionReader dengan lebih baik dalam pembangunan bahasa Go.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn