refactor: Improve parsing of CK Airlines (CK) flight schedule data

This commit is contained in:
windyboy
2024-08-02 11:36:21 +08:00
parent 2962dee69d
commit 158a03d4c3
2 changed files with 40 additions and 6 deletions
+19 -4
View File
@@ -20,10 +20,11 @@ const (
Date = "date" Date = "date"
Task = "task" Task = "task"
// Index = "idx" // Index = "idx"
AllDigitsPattern = `^(?P<dep_time>\d+)$` AllDigitsPattern = `^(?P<dep_time>\d+)$`
IndexPattern = `^(?P<idx>\(?L?[0-9]+\)?:?\.?)$` IndexPattern = `^(?P<idx>\(?L?[0-9]+\)?:?\.?)$`
DatePattern = `^(?P<date>\d{2}\w{3})$` DatePattern = `^(?P<date>\d{2}\w{3})$`
TaskPattern = `^(?P<task>[A-Z]\/[A-Z])$` // CK task: 01)H/Z
TaskPattern = `(?P<task>[A-Z]\/[A-Z])$`
WaypointPattern = `^(SI:)?(?P<arr_time>\d{4}(\(\d{2}[A-Z]{3}\))?)?\/?(?P<airport>[A-Z]{3})\/?(?P<dep_time>\d{4}(\(\d{2}[A-Z]{3}\))?)?$` WaypointPattern = `^(SI:)?(?P<arr_time>\d{4}(\(\d{2}[A-Z]{3}\))?)?\/?(?P<airport>[A-Z]{3})\/?(?P<dep_time>\d{4}(\(\d{2}[A-Z]{3}\))?)?$`
FlightNumberPattern = `^(?P<number>[0-9A-Z][0-9A-Z]\d{3,5})$` FlightNumberPattern = `^(?P<number>[0-9A-Z][0-9A-Z]\d{3,5})$`
RegisterPattern = `^(?P<reg>B\d{4})$` RegisterPattern = `^(?P<reg>B\d{4})$`
@@ -172,6 +173,20 @@ var (
3: Register, 3: Register,
}, },
}, },
{
/**
* 中国货运 (CK)
*01)H/Z CK261 B2076 PVG1535(30OCT) 1705TPE
*/
Airlines: []string{"CK"},
MinLen: 4,
WaypointStart: 3,
Fields: map[int]string{
0: Task,
1: FlightNumber,
2: Register,
},
},
} }
) )
+21 -2
View File
@@ -206,9 +206,9 @@ var _ = Describe("Parser Definition", func() {
}) })
}) })
Context("CK", func() { Context("XX", func() {
It("nil", func() { It("nil", func() {
def := FindDef("CK") def := FindDef("XX")
Expect(def).To(BeNil()) Expect(def).To(BeNil())
}) })
}) })
@@ -365,4 +365,23 @@ var _ = Describe("Parse Line with PreDef", func() {
}) })
}) })
Context("CK", func() {
It("01)H/Z CK261 B2076 PVG1535(30OCT) 1705TPE", func() {
lineText := "01)H/Z CK261 B2076 PVG1535(30OCT) 1705TPE"
def := FindDef("CK")
Expect(def).NotTo(BeNil())
schedule := ParseWithDef(lineText, def)
Expect(schedule).NotTo(BeNil())
Expect(schedule.Task).To(Equal("H/Z"))
Expect(len(schedule.FlightNumber)).To(Equal(1))
Expect(schedule.FlightNumber[0]).To(Equal("CK261"))
Expect(schedule.AircraftReg).To(Equal("B2076"))
Expect(len(schedule.Waypoints)).To(Equal(2))
Expect(schedule.Waypoints[0].Airport).To(Equal("PVG"))
Expect(schedule.Waypoints[0].DepartureTime).To(Equal("1535(30OCT)"))
Expect(schedule.Waypoints[1].Airport).To(Equal("TPE"))
Expect(schedule.Waypoints[1].ArrivalTime).To(Equal("1705"))
})
})
}) })