|
@@ -0,0 +1,82 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "bufio"
|
|
|
|
+ "fmt"
|
|
|
|
+ "log"
|
|
|
|
+ "os"
|
|
|
|
+ "strconv"
|
|
|
|
+ "strings"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type schedule struct {
|
|
|
|
+ timestamp int64
|
|
|
|
+ buses map[int64]int64
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func getIDs(busesString string) (map[int64]int64, error) {
|
|
|
|
+ buses := make(map[int64]int64)
|
|
|
|
+
|
|
|
|
+ for _, bus := range strings.Split(busesString, ",") {
|
|
|
|
+ if bus == "x" {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ busID, err := strconv.ParseInt(bus, 10, 32)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return buses, fmt.Errorf("Error parsing busID %s: %s", bus, err)
|
|
|
|
+ }
|
|
|
|
+ buses[busID] = 0
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return buses, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func readData(file *os.File) (schedule, error) {
|
|
|
|
+ scanner := bufio.NewScanner(file)
|
|
|
|
+ data := schedule{}
|
|
|
|
+
|
|
|
|
+ if !scanner.Scan() {
|
|
|
|
+ return data, fmt.Errorf("Error reading timestamp!")
|
|
|
|
+ }
|
|
|
|
+ timestampString := scanner.Text()
|
|
|
|
+
|
|
|
|
+ timestamp, err := strconv.ParseInt(timestampString, 10, 32)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return data, fmt.Errorf("Error parsing timestamp %s: %s", timestampString, err)
|
|
|
|
+ }
|
|
|
|
+ data.timestamp = timestamp
|
|
|
|
+
|
|
|
|
+ if !scanner.Scan() {
|
|
|
|
+ return data, fmt.Errorf("Error reading buses!")
|
|
|
|
+ }
|
|
|
|
+ busesString := scanner.Text()
|
|
|
|
+ if err := scanner.Err(); err != nil {
|
|
|
|
+ return data, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data.buses, err = getIDs(busesString)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return data, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return data, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ if len(os.Args) < 2 {
|
|
|
|
+ log.Fatal("You need to specify a file!")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ file, err := os.Open(os.Args[1])
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatalf("Failed to open %s!\n", os.Args[1])
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data, err := readData(file)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatalf("Failed to read data: %s\n", err)
|
|
|
|
+ }
|
|
|
|
+ fmt.Println(data)
|
|
|
|
+}
|