Ruben Gomez
Ruben Gomez

Reputation: 15

Csv conversion with go

I am still a noob at golang, but I will try to explain what I want to create.

I have this: table

I want to convert this same table into a csv file like this

This is the code I have:

func maakCSVBestand() {

    rapportage := haalRapportage()
    opdrachten := rapportage.Opdrachten

    csvFile, err := os.Create("Rapportage Urenverantwoording.csv")

    if err != nil {
        fmt.Println(err)
    }
    defer csvFile.Close()

    writer := csv.NewWriter(csvFile)
    writer.Comma = ';'
    writer.Write([]string{"Datum", "Naam", "Aantal uren gewerkt", "Aantal deuren gemaakt", "Informatie"})
    for i := 0; i < len(opdrachten); i++ {

        var row []string
        persoon := opdrachten[i].Persoon
        row = append(row, opdrachten[i].Datum.String())

        for j := 0; j < len(persoon); j++ {

            row = append(row, persoon[j].Naam+" "+persoon[j].Achternaam)
            row = append(row, strconv.FormatFloat(persoon[j].UrenGewerkt, 'g', 2, 64))
            row = append(row, strconv.Itoa(persoon[j].AantalDeurenGemaakt))
            row = append(row, persoon[j].Informatie)

        }
        writer.Write(row)

    }
    writer.Flush()
}

But this creates this

What am i doing wrong?

Upvotes: 1

Views: 71

Answers (1)

user13631587
user13631587

Reputation:

Write one row for each iteration of the inner loop. Clear the first column after the first iteration:

for i := 0; i < len(opdrachten); i++ {

    var row []string
    persoon := opdrachten[i].Persoon
    row = append(row, opdrachten[i].Datum.String())
    for j := 0; j < len(persoon); j++ {
        row = append(row, persoon[j].Naam+" "+persoon[j].Achternaam)
        row = append(row, strconv.FormatFloat(persoon[j].UrenGewerkt, 'g', 2, 64))
        row = append(row, strconv.Itoa(persoon[j].AantalDeurenGemaakt))
        row = append(row, persoon[j].Informatie)
        writer.Write(row)
        row[0] = ""   // clear Datum field
        row = row[1:] // collect new values after blank datum 
    }
}

Upvotes: 1

Related Questions