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 }