Created
August 23, 2019 06:59
-
-
Save rabingaire/30f6a64b887b015d47c463c6d425e11f to your computer and use it in GitHub Desktop.
CSV Extractor: Reads CSV file and creates a sub CSV file given start row and end row
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"encoding/csv" | |
"log" | |
"os" | |
"strconv" | |
) | |
func main() { | |
args := os.Args[1:] | |
if len(args) < 3 { | |
log.Fatal("Pass all the arguments") | |
} | |
inputFileName := args[0] | |
start, err := strconv.Atoi(args[1]) | |
if err != nil { | |
log.Fatal(err) | |
} | |
end, err := strconv.Atoi(args[2]) | |
if err != nil { | |
log.Fatal(err) | |
} | |
outputFileName := args[3] | |
fileReader, err := os.Open(inputFileName) | |
if err != nil { | |
log.Fatal(err) | |
} | |
csvReader := csv.NewReader(fileReader) | |
counter := 0 | |
rows := make([][]string, 0) | |
header, err := csvReader.Read() | |
if err != nil { | |
log.Fatal(err) | |
} | |
rows = append(rows, header) | |
for { | |
row, err := csvReader.Read() | |
if err != nil { | |
log.Fatal(err) | |
} | |
if start < counter { | |
rows = append(rows, row) | |
} | |
if end < counter { | |
break | |
} | |
counter++ | |
} | |
// Create a csv file | |
file, err := os.Create(outputFileName) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer file.Close() | |
csvWriter := csv.NewWriter(file) | |
csvWriter.WriteAll(rows) | |
if err := csvWriter.Error(); err != nil { | |
log.Fatalln("error writing csv:", err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
First Argument: Input CSV file name/path
Second Argument: Start row number (0 is the first row, excluding header)
Third Argument: End row number
Fourth Argument: Output CSV file name/path
Start and End row number are both inclusive.