refactor: Update FlightNumberPattern regex to handle multiple flight numbers
This commit is contained in:
@@ -14,7 +14,7 @@ const (
|
|||||||
// CK task: 01)H/Z
|
// CK task: 01)H/Z
|
||||||
TaskPattern = `(?P<task>[A-Z]\/[A-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}(\/\d+)*)$`
|
||||||
RegisterPattern = `^(?P<reg>B\d{4})$`
|
RegisterPattern = `^(?P<reg>B\d{4})$`
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -236,6 +236,51 @@ var (
|
|||||||
3: Register,
|
3: Register,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 山东航空 (SC)
|
||||||
|
*(1) SC4717 B3080 CRJ7 ILS I (6) TAO/2350 TSN
|
||||||
|
*/
|
||||||
|
Airlines: []string{"SC"},
|
||||||
|
MinLen: 9,
|
||||||
|
WaypointStart: 7,
|
||||||
|
Fields: map[int]string{
|
||||||
|
0: Index,
|
||||||
|
1: FlightNumber,
|
||||||
|
2: Register,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 西部航空 (PN)
|
||||||
|
*21) PN6237 B6763 ILS I(9) CKG/0000 0220/TSN
|
||||||
|
*23) PN6235 B6763 ILS I(9) CKG/0905 1025/WUH/1100 1225/WNZ
|
||||||
|
*/
|
||||||
|
Airlines: []string{"PN"},
|
||||||
|
MinLen: 7,
|
||||||
|
WaypointStart: 5,
|
||||||
|
Fields: map[int]string{
|
||||||
|
0: Index,
|
||||||
|
1: FlightNumber,
|
||||||
|
2: Register,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 南方航空 (CZ)
|
||||||
|
*
|
||||||
|
*83. CZ3301/2 B2823 B752 CAN0135 TSN0535 CAN
|
||||||
|
*02. CZ6973/4 B5239 B737 YIN0235 URC0425 PVG0940 URC1545 YIN
|
||||||
|
*/
|
||||||
|
Airlines: []string{"CZ"},
|
||||||
|
MinLen: 6,
|
||||||
|
WaypointStart: 4,
|
||||||
|
Fields: map[int]string{
|
||||||
|
0: Index,
|
||||||
|
1: FlightNumber,
|
||||||
|
2: Register,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -143,8 +143,7 @@ func ParseLine(line string) *domain.ScheduleLine {
|
|||||||
parsed[Date] = true
|
parsed[Date] = true
|
||||||
maxParsed = i
|
maxParsed = i
|
||||||
case FlightNumber:
|
case FlightNumber:
|
||||||
//TODO: Handle multiple flight numbers
|
flightSchedule.FlightNumber = getFlightNumbers(data[FlightNumber])
|
||||||
flightSchedule.FlightNumber = append(flightSchedule.FlightNumber, data[FlightNumber])
|
|
||||||
parsed[FlightNumber] = true
|
parsed[FlightNumber] = true
|
||||||
maxParsed = i
|
maxParsed = i
|
||||||
case Register:
|
case Register:
|
||||||
@@ -205,3 +204,30 @@ func parseWaypoints(points []string) []domain.WayPoint {
|
|||||||
// log.Debugf("Found %d waypoints", len(waypoints))
|
// log.Debugf("Found %d waypoints", len(waypoints))
|
||||||
return waypoints
|
return waypoints
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CZ6794/79
|
||||||
|
* CZ3301/2
|
||||||
|
* CA1371/1372/1527
|
||||||
|
*/
|
||||||
|
func getFlightNumbers(data string) []string {
|
||||||
|
// matchNumbers := extract(data, FlightNumberExpression)
|
||||||
|
// numbers := matchNumbers[FlightNumber]
|
||||||
|
// if numbers == "" {
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
if strings.Contains(data, "/") {
|
||||||
|
data := strings.Split(data, "/")
|
||||||
|
baseNumber := data[0]
|
||||||
|
baseLength := len(baseNumber)
|
||||||
|
flightNumbers := append([]string{}, baseNumber)
|
||||||
|
for _, number := range data[1:] {
|
||||||
|
length := len(number)
|
||||||
|
flightNumber := baseNumber[:baseLength-length] + number
|
||||||
|
flightNumbers = append(flightNumbers, flightNumber)
|
||||||
|
}
|
||||||
|
return flightNumbers
|
||||||
|
} else {
|
||||||
|
return []string{data}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -113,6 +113,29 @@ var _ = Describe("Schedule Parser", func() {
|
|||||||
Expect(data[FlightNumber]).To(Equal("9C8812"))
|
Expect(data[FlightNumber]).To(Equal("9C8812"))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("CA1371/1372/1527", func() {
|
||||||
|
It("3 number : CA1371 CA1372 CA1527", func() {
|
||||||
|
message := "CA1371/1372/1527"
|
||||||
|
data := getFlightNumbers(message)
|
||||||
|
Expect(data).NotTo(BeNil())
|
||||||
|
Expect(data).To(HaveLen(3))
|
||||||
|
Expect(data).To(ContainElement("CA1371"))
|
||||||
|
Expect(data).To(ContainElement("CA1372"))
|
||||||
|
Expect(data).To(ContainElement("CA1527"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("CZ3301/2", func() {
|
||||||
|
It("2 number : CZ3301 CZ3302", func() {
|
||||||
|
message := "CZ3301/2"
|
||||||
|
data := getFlightNumbers(message)
|
||||||
|
Expect(data).NotTo(BeNil())
|
||||||
|
Expect(data).To(HaveLen(2))
|
||||||
|
Expect(data).To(ContainElement("CZ3301"))
|
||||||
|
Expect(data).To(ContainElement("CZ3302"))
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Describe("Schedule Date Parser", func() {
|
Describe("Schedule Date Parser", func() {
|
||||||
@@ -465,4 +488,22 @@ var _ = Describe("Parse Line with PreDef", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("SC", func() {
|
||||||
|
It("(1) SC4717 B3080 CRJ7 ILS I (6) TAO/2350 TSN", func() {
|
||||||
|
lineText := "(1) SC4717 B3080 CRJ7 ILS I (6) TAO/2350 TSN"
|
||||||
|
def := FindDef("SC")
|
||||||
|
Expect(def).NotTo(BeNil())
|
||||||
|
schedule := ParseWithDef(lineText, def)
|
||||||
|
Expect(schedule).NotTo(BeNil())
|
||||||
|
Expect(schedule.Index).To(Equal("(1)"))
|
||||||
|
Expect(len(schedule.FlightNumber)).To(Equal(1))
|
||||||
|
Expect(schedule.FlightNumber[0]).To(Equal("SC4717"))
|
||||||
|
Expect(schedule.AircraftReg).To(Equal("B3080"))
|
||||||
|
Expect(len(schedule.Waypoints)).To(Equal(2))
|
||||||
|
Expect(schedule.Waypoints[0].Airport).To(Equal("TAO"))
|
||||||
|
Expect(schedule.Waypoints[0].DepartureTime).To(Equal("2350"))
|
||||||
|
Expect(schedule.Waypoints[1].Airport).To(Equal("TSN"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user