Skip to content

Instantly share code, notes, and snippets.

@dele454
Last active August 6, 2022 03:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dele454/7d23843219a7001f3192aa3c17d2a87f to your computer and use it in GitHub Desktop.
Save dele454/7d23843219a7001f3192aa3c17d2a87f to your computer and use it in GitHub Desktop.
Part 1 - CSV Transformation
// Read reads from the csv file
func (c *CSVParser) Read(wg *sync.WaitGroup, record chan<- []string, done chan<- bool) {
start := time.Now()
defer func() {
close(done)
close(record)
c.reporter.AddDuration(time.Since(start).Seconds())
wg.Done()
}()
// open file for reading
f, err := os.Open(c.reporter.GetFilename())
if err != nil {
panic(err)
}
defer f.Close()
// set the headers
c.reporter.SetHeaders(utils.GetHeaders())
// set the file name
c.reporter.SetFilename(filepath.Base(c.reporter.GetFilename()))
// create csv reader
reader := csv.NewReader(f)
// parse headers detected in file
if err := c.parseHeaders(reader); err != nil {
c.reporter.AddError(err)
}
// read from file
for {
row, err := reader.Read()
if err != nil {
if err != io.EOF {
c.reporter.AddError(err)
c.reporter.RecordFailed()
continue
}
break
}
c.reporter.RecordProcessed()
record <- row
}
done <- true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment