package main import ( "bufio" "encoding/csv" "flag" "fmt" "html/template" "io" "log" "os" "strings" ) func main() { var file = flag.String("file", "", "File to import") var output = flag.String("output", "", "File to generate") //var columnStart = flag.Int("columnStart", -1, "Column number with a start Datetime") //var columnEnd = flag.Int("columnEnd", -1, "Column number with a end Datetime") //var columnDescription = flag.Int("columnDescription", -1, "Column number with a descriptive name or similar") flag.Parse() if _, err := os.Stat(*file); os.IsNotExist(err) || *output == "" { flag.Usage() return } fmt.Println("Analyzing " + *file + "...") readCsvFile(*file, *output) } func readCsvFile(input string, output string) { csvFile, _ := os.Open(input) reader := csv.NewReader(bufio.NewReader(csvFile)) type JobDetails struct { Id int Name string Type string Provider string Start []string End []string } type ViewData struct { Jobs []JobDetails } var data ViewData id := 0 for { row, err := reader.Read() if err == io.EOF { break } id++ job := JobDetails{ Id: id, Name: row[1], Type: row[2], Provider: row[0], Start: strings.Split(row[3], ","), End: strings.Split(row[4], ","), } data.Jobs = append(data.Jobs, job) } fmt.Println("Scanning done.") fmt.Println("Creating template...") tpl, err := template.ParseFiles("template.html") if err != nil { fmt.Println(err) } outputFile, err := os.Create(output) if err != nil { log.Println("create file: ", err) return } err = tpl.Execute(outputFile, data) if err != nil { log.Print("execute: ", err) return } outputFile.Close() fmt.Println("Generated " + output) }