szczanieckiej.git

commit 9e9f673730ea258410022aa7ad891a84c4b6c8a9

Author: Adam Evyčędo <git@apiote.xyz>

fix number of fields in stops in Brussels

 traffic/brussels_stib_mivb.go | 56 +++++++++++++++++++++++++++++++++++++


diff --git a/traffic/brussels_stib_mivb.go b/traffic/brussels_stib_mivb.go
index 15bbccd4dad570a066f91989e8c96a647c22a271..a0f04e2ebdb0510c39fd1e805fd64808490b0f37 100644
--- a/traffic/brussels_stib_mivb.go
+++ b/traffic/brussels_stib_mivb.go
@@ -5,6 +5,9 @@
 package traffic
 
 import (
+	"bufio"
+	"io"
+
 	"apiote.xyz/p/szczanieckiej/config"
 	"apiote.xyz/p/szczanieckiej/transformers"
 
@@ -187,6 +190,59 @@ 	if err != nil {
 		return fmt.Errorf("while writing record: %w", err)
 	}
 	w.Flush()
+
+	// fix number of fields in stops
+	stopsFile, err := os.Open(filepath.Join(path, "stops.txt"))
+	if err != nil {
+		return fmt.Errorf("while opening stops file: %w", err)
+	}
+	defer stopsFile.Close()
+	stops2File, err := os.OpenFile(filepath.Join(path, "stops2.txt"), os.O_RDWR|os.O_CREATE, 0644)
+	if err != nil {
+		return fmt.Errorf("while opening stops2 file: %w", err)
+	}
+	defer stops2File.Close()
+	r := csv.NewReader(bufio.NewReader(stopsFile))
+	r.FieldsPerRecord = -1
+	w = csv.NewWriter(stops2File)
+	header, err := r.Read()
+	if err != nil {
+		return fmt.Errorf("while reading stops header: %w", err)
+	}
+	fields := map[string]int{}
+	for i, headerField := range header {
+		fields[headerField] = i
+	}
+	err = w.Write(header)
+	if err != nil {
+		return fmt.Errorf("while writing stops header: %w", err)
+	}
+
+	for {
+		record, err := r.Read()
+		if err == io.EOF {
+			break
+		}
+		if err != nil {
+			return fmt.Errorf("while reading a stop record: %w", err)
+		}
+		for len(record) < len(header) {
+			record = append(record, "")
+		}
+		err = w.Write(record)
+		if err != nil {
+			return fmt.Errorf("while writing a stop record: %w", err)
+		}
+	}
+	w.Flush()
+	err = os.Remove(filepath.Join(path, "stops.txt"))
+	if err != nil {
+		return fmt.Errorf("while removing stops: %w", err)
+	}
+	err = os.Rename(filepath.Join(path, "stops2.txt"), filepath.Join(path, "stops.txt"))
+	if err != nil {
+		return fmt.Errorf("while renaming stops: %w", err)
+	}
 	return nil
 }