Heim >Backend-Entwicklung >Golang >Bestimmen Sie, wie viele Bytes eine CSV-Zeile in Golang hat
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
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) } }
Verwenden Sie Reader.InputOffset, um die aktuelle Position in der Datei zu erhalten: 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() }
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!