Categorygithub.com/scottdware/go-easycsv
modulepackage
0.0.0-20220912230445-086d7a1ee17e
Repository: https://github.com/scottdware/go-easycsv.git
Documentation: pkg.go.dev

# README

go-easycsv

This package is an easy to use wrapper around reading from, and writing to CSV files.

Examples

Reading From a CSV File

Let's assume we have a CSV file named "dogs.csv" with the following content:

German Shepherd,Male,3,Black and Tan
Shiba-Inu,Female,13,Black and Tan
Shepherd/Husky,Male,11,Tan

To read each row, we use the Open() function. This returns a [][]string of the contents you can easily iterate over.

NOTE: Lines beginning with a # (comment) will be ignored!

package main

import (
    "fmt"
    "github.com/scottdware/go-easycsv"
)

func main() {
    dogs, err := easycsv.Open("dogs.csv")
    if err != nil {
        fmt.Println(err)
    }

    for _, dog := range dogs {
        // Find out how many columns we have in each row
        cols := len(dog)

        // Print the number of columns for each row, as well as the entire row's contents
        fmt.Printf("Columns: %d, Data: %+v\n", cols, dog)
    }
}

This will output the following:

Columns: 4, Data: [German Shepherd Male 3 Black and Tan]
Columns: 4, Data: [Shiba-Inu Female 13 Black and Tan]
Columns: 4, Data: [Shepherd/Husky Male 11 Tan]

Remember that column numbering starts at 0, so if you want to assign each column to a variable name, you can do so as follows:

for _, dog := range dogs {
    // Assign variables for each column
    breed := dog[0]
    sex := dog[1]
    age := dog[2]
    color := dog[3]

    // Print the number of columns for each row, as well as the entire row's contents
    fmt.Printf("Breed: %s, Sex: %s, Age: %s, Color: %s\n", breed, sex, age, color)
}

The above will output the following:

Breed: German Shepherd, Sex: Male, Age: 3, Color: Black and Tan
Breed: Shiba-Inu, Sex: Female, Age: 13, Color: Black and Tan
Breed: Shepherd/Husky, Sex: Male, Age: 11, Color: Tan

Creating and Writing to CSV Files

To create a new CSV file, you can use the NewCSV() function. This only takes one parameter, which is the name/path to the CSV file. You then can use the Write() function to create content. Once you are finished writing to the file (buffer), you must call the End() function to actually write the contents to the file and close it from further writing.

package main

import (
	"fmt"

	"github.com/scottdware/go-easycsv"
)

func main() {
    dogsCSV, err := easycsv.NewCSV("dogs.csv")
    if err != nil {
        fmt.Println(err)
    }

    dogsCSV.Write("German Shepherd,Male,3,Black and Tan\n")
    dogsCSV.Write("Shiba-Inu,Female,13,Black and Tan\n")
    dogsCSV.Write("Shepherd/Husky,Male,11,Tan\n")
    dogsCSV.End()
}

# Functions

NewCSV creates a new CSV file for writing to.
Open takes the given path to a csv file and returns the rows as a [][]string which you can then iterate over.

# Structs

CSV contains our buffer for writing to when creating a CSV file.