Eu tenho um CSV de um gerador de relatórios que adiciona alguns preâmbulos não CSV, como:
Time Off Requests
My Org
Street Address
City, State ZIP
Col1,Col2,Col3
r1c1,r1c2,r1c3
r2c1,r2c2,r2c3
Preciso descartar as 6 linhas antes de passar o io.Reader do arquivo para csv.NewReader e tentar um ReadAll(), então preciso garantir que não leio nem um byte além da 6ª linha.
Eu originalmente pensei em bufio.Scanner e chamando Scan() em um loop 6 vezes, mas então percebi experimentalmente que o "buf" em bufio significa que não posso controlar onde as leituras em buffer terminam e provavelmente irá ler além do verdadeiro início do CSV.
Então, resolvi apenas ler byte por byte até contar seis feeds de linha (10):
f, _ := os.Open(csvPath)
// Read just past report-generated 6-line preamble
b := make([]byte, 1)
for i := 0; i < 6; {
f.Read(b)
if b[0] == 10 {
i++
}
}
r := csv.NewReader(f)
records, err = r.ReadAll()
...
E isso funciona. Mas existe uma maneira mais idiomática de Go?