arr and dep with composite regex

This commit is contained in:
zhiqiang feng
2021-01-05 12:43:04 +08:00
parent 263f38633f
commit 67a28c2280
4 changed files with 113 additions and 58 deletions
+44 -27
View File
@@ -4,17 +4,28 @@ import (
"errors"
"regexp"
"strings"
"time"
)
const (
FlopRegex = `(?m)\((?P<type>\w{3}).*(.|\n|\r).*\)`
DestinationRegex = `(?P<dest>\w+)(?P<time>\d{0,4})?`
DOFRegex = `(?m)DOF\/(?P<time>\d{6})`
DestinationRegex = `(?P<dest>[A-Z]+)(?P<time>\d{0,4})`
DofValueRex = `(?m)DOF\/(?P<time>\d{6})`
TypeArrival = "ARR"
TypeDeparture = "DEP"
TypeFlightPlan = "FPL"
TypeDelay = "DLA"
DepRegex = `(?P<dep>\w+\d{0,4})`
ArrRegex = `(?P<arr>\w+\d{0,4})`
PlaneRegex = `(?P<plane>\w+\d+\/?\w\d+)`
DofRegex = `(?P<dof>DOF\/\d{6})`
KeyPlane = "plane"
CompositeDepArr = `(?m)\(` + `\w{3}` + "-" + PlaneRegex + "-" + DepRegex + "-" + ArrRegex + "-?" + DofRegex + `?\)`
KeyDeparture = "dep"
KeyArrival = "arr"
KeyDof = "dof"
)
var flopRegex = regexp.MustCompile(FlopRegex)
@@ -25,18 +36,30 @@ func parseArrOrDep(telegram *Telegram, data string) {
* (ARR-CSN3126/A5040-ZSPD-ZBTJ1601)
* (DEP-CSN3125/A4553-ZGHA0554-ZBTJ-DOF/120820)
*/
values := getSplitValues(data)
l := len(values)
if l < 4 {
//values := getSplitValues(data)
//l := len(values)
//if l < 4 {
// telegram.ParseErrors = append(telegram.ParseErrors, errors.New("arrival data less than 4 "))
// return
//}
//
//telegram.FlightNumber, telegram.RegisterNumber = parseFlight(values[1])
//telegram.Departure, telegram.DepartureTime = parseAirportAndTime(values[2])
//telegram.Destination, telegram.DestinationTime = parseAirportAndTime(values[3])
//if l == 5 {
// parseDof(telegram, values[4])
//}
//fmt.Println(CompositeDepArr)
fields := getFields(CompositeDepArr, data)
if len(fields) < 1 {
telegram.ParseErrors = append(telegram.ParseErrors, errors.New("arrival data less than 4 "))
return
}
telegram.FlightNumber, telegram.RegisterNumber = parseFlight(values[1])
telegram.Departure, telegram.DepartureTime = getAirportAndTime(values[2])
telegram.Destination, telegram.DestinationTime = getAirportAndTime(values[3])
if l == 5 {
parseDof(telegram, values[4])
telegram.FlightNumber, telegram.RegisterNumber = parseFlight(fields[KeyPlane])
telegram.Departure, telegram.DepartureTime = parseAirportAndTime(fields[KeyDeparture])
telegram.Destination, telegram.DestinationTime = parseAirportAndTime(fields[KeyArrival])
dofValue := fields[KeyDof]
if len(dofValue) > 0 {
telegram.DateOfFlight = parseDof(dofValue)
}
telegram.Parsed = true
}
@@ -57,10 +80,10 @@ func parseFlightPlan(telegram *Telegram, data string) {
values := getSplitValues(data)
telegram.FlightNumber = values[1]
telegram.Plane = values[3]
telegram.Departure, telegram.DepartureTime = getAirportAndTime(values[5])
telegram.Departure, telegram.DepartureTime = parseAirportAndTime(values[5])
destString := strings.Split(values[7], " ")
telegram.Destination, telegram.DestinationTime = getAirportAndTime(destString[0])
parseDof(telegram, values[8])
telegram.Destination, telegram.DestinationTime = parseAirportAndTime(destString[0])
//parseDof(telegram, values[8])
}
@@ -71,15 +94,9 @@ func parseDelay(telegram *Telegram, data string) {
*/
values := getSplitValues(data)
telegram.FlightNumber = values[1]
telegram.Departure, telegram.DepartureTime = getAirportAndTime(values[2])
telegram.Destination, telegram.DestinationTime = getAirportAndTime(values[3])
if len(values) == 5 {
parseDof(telegram, values[4])
}
}
func parseDof(telegram *Telegram, text string) {
if dof := getFields(DOFRegex, text); len(dof) == 1 {
telegram.DateOfFlight, _ = time.Parse("060102", dof["time"])
}
telegram.Departure, telegram.DepartureTime = parseAirportAndTime(values[2])
telegram.Destination, telegram.DestinationTime = parseAirportAndTime(values[3])
//if len(values) == 5 {
// parseDof(telegram, values[4])
//}
}