Heim > Backend-Entwicklung > Golang > Bestimmen Sie, wie viele Bytes eine CSV-Zeile in Golang hat

Bestimmen Sie, wie viele Bytes eine CSV-Zeile in Golang hat

王林
Freigeben: 2024-02-05 23:33:08
nach vorne
1107 Leute haben es durchsucht

确定 Golang 中 CSV 行有多少字节

Frageninhalt

Ich habe ein test.csv und ich werde es Zeile für Zeile lesen und feststellen, wie viele Bytes in jeder Zeile sind.

Dies sollte weniger als 37 Bytes sein, da ich unter Windows arbeite und die ersten beiden Zeilen rn insgesamt 4 Bytes hinzufügen.

foo,bar,baz
100,200,300
400,500,600
Nach dem Login kopieren

Ich möchte csv.NewReader() 简单地确定每行中有多少字节。但是,我知道在下面的代码中进行字节计数时,csv.Reader 不会计算每行中的逗号和 n verwenden.

Sollte ich etwas Mathematik für die Anzahl der Kommas in jeder Zeile + die Anzahl der Zeilen hinzufügen, rn -1, um 2 Bytes für die letzte Zeile hinzuzufügen, da sie kein rn hat? Das fühlt sich etwas abgedroschen an, deshalb würde ich lieber sehen, ob es eine bessere Lösung für mein Byte-Count-Problem gibt.

Mein Code:

package main

import (
    "encoding/csv"
    "fmt"
    "io"
    "log"
    "os"
)

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

    fileInfo, err := file.Stat()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("file total bytes is %d\n", fileInfo.Size())

    // init reader
    reader := csv.NewReader(file)

    // extract the header
    headers, err := reader.Read()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("headers are: %+v\n", headers)

    byteCounter := 0
    for {
        // if we reached end of file, stop
        if err == io.EOF {
            break
        }

        // read a record
        record, err := reader.Read()
        if err != nil {
            log.Fatal(err)
        }
        // loop through each record and count how many bytes
        for _, item := range record {
            byteCounter += len(item)
            fmt.Printf("record is %d bytes\n", len(item))
        }
        fmt.Println("total bytes so far is: ", byteCounter)

    }
}
Nach dem Login kopieren


Richtige Antwort


Verwenden Sie Reader.InputOffset, um die aktuelle Position in der Datei zu erhalten: < /p> BD44F3686574B2610B9F6F11A1F9CFEF

https://www.php.cn/link/e2c2ff9c7fb57db574e461fbe467d84e

Um die Anzahl der Bytes pro Zeile zu erhalten, subtrahieren Sie den vorherigen Offset.

prevOffset := reader.InputOffset()

for {
    ...
    // read a record
    _, err := reader.Read()
    ...
    fmt.Println("line length is: ", reader.InputOffset()-prevOffset)
    prevOffset = reader.InputOffset()

}
Nach dem Login kopieren

https://www.php.cn/link/501e3f8a108d7ab9335ceecd363d113d

Das obige ist der detaillierte Inhalt vonBestimmen Sie, wie viele Bytes eine CSV-Zeile in Golang hat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage