Files
2019/utilities/parsing.go
2022-06-07 10:01:29 -05:00

62 lines
1.3 KiB
Go

package utilities
import (
"bufio"
"fmt"
"strconv"
"parnic.com/aoc2019/inputs"
)
func getData(filename string, lineHandler func(line string)) {
file, err := inputs.Sets.Open(fmt.Sprintf("%s.txt", filename))
// version that doesn't use embedded files:
// file, err := os.Open(fmt.Sprintf("inputs/%s.txt", filename))
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
lineHandler(scanner.Text())
}
}
func LoadIntcodeProgram(filename string) IntcodeProgram {
programStr := GetStringContents(filename)
return ParseIntcodeProgram(programStr)
}
func GetStringContents(filename string) string {
var retval string
getData(filename, func(line string) {
if len(retval) != 0 {
panic("tried to parse multi-line file as a single line")
}
retval = line
})
return retval
}
func GetStringLines(filename string) []string {
retval := make([]string, 0)
getData(filename, func(line string) {
retval = append(retval, line)
})
return retval
}
func GetIntLines(filename string) []int64 {
retval := make([]int64, 0)
getData(filename, func(line string) {
val, err := strconv.ParseInt(line, 10, 64)
if err != nil {
panic(err)
}
retval = append(retval, val)
})
return retval
}