planner
This commit is contained in:
259
pkg/reader/csvreader.go
Normal file
259
pkg/reader/csvreader.go
Normal file
@@ -0,0 +1,259 @@
|
||||
package reader
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"io"
|
||||
"strconv"
|
||||
|
||||
"git.tornberg.me/go-gtfs/pkg/types"
|
||||
)
|
||||
|
||||
func ParseAgencies(r io.Reader, callback func(types.Agency)) error {
|
||||
reader := csv.NewReader(r)
|
||||
// skip header
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
agency := types.Agency{
|
||||
AgencyID: record[0],
|
||||
AgencyName: record[1],
|
||||
AgencyURL: record[2],
|
||||
AgencyTimezone: record[3],
|
||||
AgencyLang: record[4],
|
||||
}
|
||||
callback(agency)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseCalendars(r io.Reader, callback func(types.Calendar)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
monday, _ := strconv.Atoi(record[1])
|
||||
tuesday, _ := strconv.Atoi(record[2])
|
||||
wednesday, _ := strconv.Atoi(record[3])
|
||||
thursday, _ := strconv.Atoi(record[4])
|
||||
friday, _ := strconv.Atoi(record[5])
|
||||
saturday, _ := strconv.Atoi(record[6])
|
||||
sunday, _ := strconv.Atoi(record[7])
|
||||
calendar := types.Calendar{
|
||||
ServiceID: record[0],
|
||||
Monday: monday,
|
||||
Tuesday: tuesday,
|
||||
Wednesday: wednesday,
|
||||
Thursday: thursday,
|
||||
Friday: friday,
|
||||
Saturday: saturday,
|
||||
Sunday: sunday,
|
||||
StartDate: record[8],
|
||||
EndDate: record[9],
|
||||
}
|
||||
callback(calendar)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseCalendarDates(r io.Reader, callback func(types.CalendarDate)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
exceptionType, _ := strconv.Atoi(record[2])
|
||||
calendarDate := types.CalendarDate{
|
||||
ServiceID: record[0],
|
||||
Date: record[1],
|
||||
ExceptionType: exceptionType,
|
||||
}
|
||||
callback(calendarDate)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseFeedInfos(r io.Reader, callback func(types.FeedInfo)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feedInfo := types.FeedInfo{
|
||||
FeedID: record[0],
|
||||
FeedPublisherName: record[1],
|
||||
FeedPublisherURL: record[2],
|
||||
FeedLang: record[3],
|
||||
FeedVersion: record[4],
|
||||
}
|
||||
callback(feedInfo)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseRoutes(r io.Reader, callback func(types.Route)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
routeType, _ := strconv.Atoi(record[4])
|
||||
route := types.Route{
|
||||
RouteID: record[0],
|
||||
AgencyID: record[1],
|
||||
RouteShortName: record[2],
|
||||
RouteLongName: record[3],
|
||||
RouteType: routeType,
|
||||
RouteURL: record[5],
|
||||
}
|
||||
callback(route)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseStopTimes(r io.Reader, callback func(types.StopTime)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
stopSequence, _ := strconv.Atoi(record[4])
|
||||
pickupType, _ := strconv.Atoi(record[5])
|
||||
dropOffType, _ := strconv.Atoi(record[6])
|
||||
stopTime := types.StopTime{
|
||||
TripID: record[0],
|
||||
ArrivalTime: record[1],
|
||||
DepartureTime: record[2],
|
||||
StopID: record[3],
|
||||
StopSequence: stopSequence,
|
||||
PickupType: pickupType,
|
||||
DropOffType: dropOffType,
|
||||
}
|
||||
callback(stopTime)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseStops(r io.Reader, callback func(types.Stop)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
stopLat, _ := strconv.ParseFloat(record[2], 64)
|
||||
stopLon, _ := strconv.ParseFloat(record[3], 64)
|
||||
locationType, _ := strconv.Atoi(record[4])
|
||||
stop := types.Stop{
|
||||
StopID: record[0],
|
||||
StopName: record[1],
|
||||
StopLat: stopLat,
|
||||
StopLon: stopLon,
|
||||
LocationType: locationType,
|
||||
}
|
||||
callback(stop)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseTransfers(r io.Reader, callback func(types.Transfer)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
transferType, _ := strconv.Atoi(record[2])
|
||||
minTransferTime, _ := strconv.Atoi(record[3])
|
||||
transfer := types.Transfer{
|
||||
FromStopID: record[0],
|
||||
ToStopID: record[1],
|
||||
TransferType: transferType,
|
||||
MinTransferTime: minTransferTime,
|
||||
FromTripID: record[4],
|
||||
ToTripID: record[5],
|
||||
}
|
||||
callback(transfer)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseTrips(r io.Reader, callback func(types.Trip)) error {
|
||||
reader := csv.NewReader(r)
|
||||
if _, err := reader.Read(); err != nil {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trip := types.Trip{
|
||||
RouteID: record[0],
|
||||
ServiceID: record[1],
|
||||
TripID: record[2],
|
||||
TripHeadsign: record[3],
|
||||
TripShortName: record[4],
|
||||
}
|
||||
callback(trip)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user