Technologische Neuigkeiten, Bewertungen und Tipps!

Golang liest eine Datei Zeile für Zeile – 3 einfache Möglichkeiten

Hinweis: Der folgende Artikel hilft Ihnen dabei: Golang liest eine Datei Zeile für Zeile – 3 einfache Möglichkeiten

Willkommen zurück zu unserer Golang-Tutorialreihe! In unserem vorherigen Beitrag haben wir drei einfache Möglichkeiten behandelt, das erste Zeichen einer Zeichenfolge in Golang zu erhalten. Wenn Sie diesen Beitrag verpasst haben, können Sie ihn hier nachlesen: So erhalten Sie das erste Zeichen einer Zeichenfolge in Golang.

In diesem Beitrag besprechen wir ein weiteres wichtiges Thema – wie man eine Datei Zeile für Zeile in Golang liest. Das zeilenweise Lesen einer Datei ist eine häufige Aufgabe in der Programmierung, und Golang bietet mehrere Möglichkeiten, dies zu erreichen. Wir werden drei einfache Methoden mit den Paketen „bufio“, „ioutil“ und „os“ untersuchen.

Lass uns eintauchen!

1: Verwenden von ioutil ReadFile

Hier ist ein Beispiel-Codeausschnitt, der zeigt, wie man eine Datei Zeile für Zeile mit dem Paket „ioutil“ liest:

Die zweite Methode verwendet das Paket „ioutil“, um eine Datei Zeile für Zeile zu lesen. Diese Methode liest den gesamten Inhalt einer Datei mithilfe der Funktion „ioutil.ReadFile“ in den Speicher. Der Inhalt der Datei wird als Byte-Slice zurückgegeben, der mit der Funktion „string“ in einen String umgewandelt werden kann. Anschließend kann der String mit der Funktion „strings.Split“ mit dem Trennzeichen „\n“ in Zeilen aufgeteilt werden. Diese Methode ist einfach und unkompliziert, eignet sich jedoch möglicherweise nicht für große Dateien, die nicht vollständig in den Speicher eingelesen werden können.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    data, err := ioutil.ReadFile("example.txt")
    if err != nil {
        log.Fatal(err)
    }

    lines := strings.Split(string(data), "\n")
    for _, line := range lines {
        fmt.Println(line)
    }
}

In diesem Beispiel lesen wir zunächst die gesamte Datei „example.txt“ mit der Funktion „ioutil.ReadFile“ in den Speicher ein. Anschließend teilen wir das Byte-Slice mit der Funktion „strings.Split“ mit dem Trennzeichen „\n“ in Zeilen auf und drucken jede Zeile mit der Funktion „fmt.Println“.

2: Verwendung des bufio-Scanners

Die erste Methode verwendet das Paket „bufio“, um eine Datei Zeile für Zeile zu lesen. Diese Methode erstellt einen neuen Scanner mithilfe der Funktion „ bufio.NewScanner“, die eine Datei als Argument akzeptiert. Mit der Methode „scanner.Scan“ bietet der Scanner eine komfortable Möglichkeit, den Inhalt einer Datei Zeile für Zeile einzulesen. Diese Methode gibt einen booleschen Wert zurück, der angibt, ob eine Zeile erfolgreich gescannt wurde oder nicht, und die Zeile selbst kann mit der Methode „scanner.Text“ abgerufen werden. Sollte beim Scannen ein Fehler auftreten, kann dieser mit der Methode „scanner.Err“ abgerufen werden.

Hier ist ein Beispiel-Codeausschnitt, der zeigt, wie man eine Datei Zeile für Zeile mit dem Paket „bufio“ liest:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("example.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        line := scanner.Text()
        fmt.Println(line)
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

In diesem Beispiel öffnen wir zunächst die Datei „example.txt“ mit der Funktion „os.Open“ und erstellen einen neuen Scanner mit der Funktion „bufio.NewScanner“. Anschließend verwenden wir eine for-Schleife, um jede Zeile der Datei mit der Methode „scanner.Scan“ zu lesen und sie mit der Funktion „fmt.Println“ auszudrucken. Abschließend prüfen wir mit der Methode „scanner.Err“ auf etwaige Fehler.

3: Verwendung von OS Open und Bufio NewReader

Die dritte Methode verwendet die Pakete „os“ und „bufio“, um eine Datei Zeile für Zeile zu lesen. Diese Methode öffnet die Datei mit der Funktion „os.Open“ und erstellt einen neuen gepufferten Reader mit der Funktion „bufio.NewReader“. Der Reader bietet eine bequeme Möglichkeit, den Inhalt einer Datei Zeile für Zeile mit der Methode „reader.ReadString“ zu lesen. Diese Methode liest eine Zeichenfolge bis zum angegebenen Trennzeichen, in diesem Fall das Zeilenumbruchzeichen „\n“. Tritt beim Lesen ein Fehler auf, kann die Schleife verlassen werden. Auch diese Methode ist einfach und unkompliziert und eignet sich zum Lesen großer Dateien, da sie den Dateiinhalt in Blöcken liest, anstatt die gesamte Datei in den Speicher zu lesen.

Hier ist ein Beispiel-Codeausschnitt, der zeigt, wie man eine Datei Zeile für Zeile mit den Paketen „os“ und „bufio“ liest:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("example.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    reader := bufio.NewReader(file)
    for {
        line, err := reader.ReadString('\n')
        if err != nil {
            break
        }
        fmt.Print(line)
    }
}

In diesem Beispiel öffnen wir zunächst die Datei „example.txt“ mit der Funktion „os.Open“ und erstellen einen neuen gepufferten Reader mit der Funktion „bufio.NewReader“. Anschließend verwenden wir eine for-Schleife, um jede Zeile der Datei mit der Methode „reader.ReadString“ zu lesen und sie mit der Funktion „fmt.Print“ auszudrucken. Abschließend prüfen wir, ob Fehler vorliegen, und brechen die Schleife ab, wenn das Ende der Datei erreicht ist.

Abschluss

Zusammenfassend lässt sich sagen, dass das zeilenweise Lesen einer Datei eine wesentliche Aufgabe in der Golang-Programmierung ist, und es gibt mehrere Möglichkeiten, dies zu erreichen. In diesem Beitrag haben wir drei einfache Methoden besprochen, die die Pakete „bufio“, „ioutil“ und „os“ verwenden. Abhängig von den spezifischen Anforderungen Ihres Projekts kann eine Methode besser geeignet sein als die anderen.

Wir hoffen, dass Sie diesen Beitrag informativ und nützlich fanden. Wenn Sie weitere Golang-Tutorials und Tipps wie dieses erhalten möchten, abonnieren Sie unbedingt unseren Blog. Danke fürs Lesen!

Wir hoffen, dass Ihnen dieser Beitrag gefällt. Wenn Sie Fragen oder Anregungen haben oder weitere zusätzliche Informationen benötigen, kommentieren Sie diese bitte unten.

Wir haben eine Coding-Community für die am häufigsten verwendeten Coding-Tipps aus der Praxis gegründet. Hier können Sie sich uns anschließen

TipSeason Discord-Kanal

TipSeason Facebook Gruppe

Als Bonus gibt es hier eine tolle Ressource, der Sie folgen können: