Maison développement back-end Golang Comment utiliser le module SectionReader pour réaliser une correspondance de contenu et effectuer une recherche dans des zones spécifiées de fichiers dans Go ?

Comment utiliser le module SectionReader pour réaliser une correspondance de contenu et effectuer une recherche dans des zones spécifiées de fichiers dans Go ?

Jul 21, 2023 pm 09:58 PM
go语言 sectionreader模块 内容搜索

Comment utiliser le module SectionReader dans Go pour réaliser une correspondance de contenu et effectuer une recherche dans une zone spécifiée d'un fichier ?

Dans le langage Go, le module SectionReader est un outil très utile qui peut opérer sur des zones spécifiées de fichiers ou d'autres objets lisibles. Dans cet article, nous apprendrons comment utiliser le module SectionReader pour réaliser une correspondance de contenu et effectuer une recherche dans des zones spécifiées de fichiers.

Tout d'abord, nous devons importer le package correspondant :

import (
    "bytes"
    "io"
    "os"
)
Copier après la connexion

Ensuite, nous devons créer un objet SectionReader pour le fichier. L'objet SectionReader reçoit trois paramètres : l'objet lisible, le décalage de début et le décalage de fin.

file, err := os.Open("example.txt")
if err != nil {
    fmt.Println("打开文件失败:", err)
    return
}

fileStat, err := file.Stat()
if err != nil {
    fmt.Println("获取文件信息失败:", err)
    return
}

startOffset := int64(10) // 起始偏移量
endOffset := fileStat.Size() // 结束偏移量(文件大小)

section := io.NewSectionReader(file, startOffset, endOffset)
Copier après la connexion

Maintenant, nous avons créé un objet SectionReader qui peut être utilisé pour la correspondance et la recherche de contenu. Ensuite, nous devons définir un modèle à utiliser pour la correspondance.

pattern := []byte("Hello")
Copier après la connexion

Nous pouvons ensuite utiliser la méthode Read dans l'objet SectionReader pour lire le fichier octet par octet et comparer avec le modèle.

buffer := make([]byte, len(pattern))
for {
    n, err := section.Read(buffer)
    if err != nil && err != io.EOF {
        fmt.Println("读取文件失败:", err)
        break
    }

    if bytes.Equal(buffer[:n], pattern) {
        fmt.Println("找到匹配的内容:", string(buffer[:n]))
    }

    if err == io.EOF {
        break
    }
}
Copier après la connexion

Dans le code ci-dessus, nous utilisons un tampon pour stocker les octets lus et vérifier s'ils correspondent au modèle. Si la correspondance réussit, le contenu correspondant est imprimé. Lorsque SectionReader atteint la fin du fichier, il renvoie une erreur io.EOF. Nous pouvons utiliser cette erreur pour déterminer si la boucle se termine.

L'exemple de code complet est le suivant :

package main

import (
    "bytes"
    "fmt"
    "io"
    "os"
)

func main() {
    file, err := os.Open("example.txt")
    if err != nil {
        fmt.Println("打开文件失败:", err)
        return
    }

    fileStat, err := file.Stat()
    if err != nil {
        fmt.Println("获取文件信息失败:", err)
        return
    }

    startOffset := int64(10) // 起始偏移量
    endOffset := fileStat.Size() // 结束偏移量(文件大小)

    section := io.NewSectionReader(file, startOffset, endOffset)

    pattern := []byte("Hello")

    buffer := make([]byte, len(pattern))
    for {
        n, err := section.Read(buffer)
        if err != nil && err != io.EOF {
            fmt.Println("读取文件失败:", err)
            break
        }

        if bytes.Equal(buffer[:n], pattern) {
            fmt.Println("找到匹配的内容:", string(buffer[:n]))
        }

        if err == io.EOF {
            break
        }
    }
}
Copier après la connexion

Grâce à l'exemple de code ci-dessus, nous pouvons utiliser le module SectionReader dans Go pour obtenir une correspondance de contenu et une recherche dans la zone spécifiée du fichier. Cela peut nous aider à localiser et à extraire rapidement ce dont nous avons besoin dans des fichiers volumineux. J'espère que cet article pourra vous être utile !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang May 03, 2024 pm 12:15 PM

Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang

Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Apr 25, 2024 pm 02:39 PM

Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang

La différence entre les tests de performances et les tests unitaires en langage Go La différence entre les tests de performances et les tests unitaires en langage Go May 08, 2024 pm 03:09 PM

La différence entre les tests de performances et les tests unitaires en langage Go

À quels pièges devons-nous prêter attention lors de la conception de systèmes distribués avec la technologie Golang ? À quels pièges devons-nous prêter attention lors de la conception de systèmes distribués avec la technologie Golang ? May 07, 2024 pm 12:39 PM

À quels pièges devons-nous prêter attention lors de la conception de systèmes distribués avec la technologie Golang ?

Bibliothèques technologiques Golang et outils utilisés dans l'apprentissage automatique Bibliothèques technologiques Golang et outils utilisés dans l'apprentissage automatique May 08, 2024 pm 09:42 PM

Bibliothèques technologiques Golang et outils utilisés dans l'apprentissage automatique

Le rôle de la technologie Golang dans le développement de l'IoT mobile Le rôle de la technologie Golang dans le développement de l'IoT mobile May 09, 2024 pm 03:51 PM

Le rôle de la technologie Golang dans le développement de l'IoT mobile

L'évolution de la convention de dénomination des fonctions Golang L'évolution de la convention de dénomination des fonctions Golang May 01, 2024 pm 03:24 PM

L'évolution de la convention de dénomination des fonctions Golang

Les paramètres de variables Golang peuvent-ils être utilisés pour les valeurs de retour de fonction ? Les paramètres de variables Golang peuvent-ils être utilisés pour les valeurs de retour de fonction ? Apr 29, 2024 am 11:33 AM

Les paramètres de variables Golang peuvent-ils être utilisés pour les valeurs de retour de fonction ?

See all articles