private List <FlightBoxData> ReadFile()
        {
            if (File.Exists(ImportFileName) == false)
            {
                throw new FileNotFoundException($"Datei {ImportFileName} existiert nicht!");
            }

            OnLogEventRaised($"Lese Datei: {ImportFileName}...");

            var flightBoxDataList = new List <FlightBoxData>();

            FlightBoxData.ResetCurrentDataRecordId();

            using (var reader = new StreamReader(ImportFileName, Encoding.UTF8))
            {
                var           lineNr                = 0;
                var           headLines             = 0;
                var           errorLines            = 0;
                var           additionalLines       = 0;
                FlightBoxData lastLineFlightBoxData = null;

                while (reader.EndOfStream == false)
                {
                    var line = reader.ReadLine();
                    lineNr++;

                    if (line == null)
                    {
                        errorLines++;
                        OnLogEventRaised($"Fehlerhafte Zeile gefunden (Zeile = null) bei Zeile {lineNr}");
                        continue;
                    }

                    if (string.IsNullOrEmpty(line))
                    {
                        errorLines++;
                        OnLogEventRaised($"Leere Zeile gefunden bei Zeile {lineNr}");
                        continue;
                    }

                    if (line.StartsWith("ARP"))
                    {
                        headLines++;
                        continue;
                    }

                    var values = line.Split(',');

                    if (values.Length < 23)
                    {
                        if (values.Length == 1 && values.Last().EndsWith("\"") && lastLineFlightBoxData.Remarks.StartsWith("\""))
                        {
                            lastLineFlightBoxData.Remarks += values.Last();
                            additionalLines++;
                            OnLogEventRaised($"Zeile {lineNr} scheint ein zusätzlicher Kommentar zu sein. Zeileninhalt: {line}");
                            continue;
                        }

                        errorLines++;
                        OnLogEventRaised($"Fehlerhafte Zeile {lineNr} kann nicht verarbeitet werden. Zeileninhalt: {line}");
                        continue;
                    }
                    else if (values.Length > 23)
                    {
                        //unescape remarks with commas
                        for (int i = 23; i < values.Length; i++)
                        {
                            values[22] += $",{values[i]}";
                        }

                        values[22] = values[22].Trim('"');
                    }

                    var flightBoxData = new FlightBoxData();

                    try
                    {
                        flightBoxData.LineNumber      = lineNr;
                        flightBoxData.Airport         = values[0];
                        flightBoxData.MovementType    = values[1];
                        flightBoxData.Immatriculation = values[2];
                        flightBoxData.TypeOfTraffic   = System.Convert.ToInt32(values[3]);
                        flightBoxData.NrOfMovements   = System.Convert.ToInt32(values[4]);
                        flightBoxData.Location        = values[5];
                        flightBoxData.NrOfPassengers  = System.Convert.ToInt32(values[6]);
                        flightBoxData.MovementDate    = values[7];
                        flightBoxData.MovementTime    = values[8];

                        DateTime parsedDate;
                        if (DateTime.TryParseExact(flightBoxData.MovementDate, "yyyyMMdd", null, DateTimeStyles.None, out parsedDate))
                        {
                            flightBoxData.MovementDateTime = parsedDate;
                        }
                        else
                        {
                            OnLogEventRaised($"Warnung beim Konvertieren des Datums auf Zeile {lineNr}. Zu konvertierendes Datum: {flightBoxData.MovementDate}");
                        }

                        DateTime parsedTime;
                        if (DateTime.TryParseExact(flightBoxData.MovementTime, "Hmm", null, DateTimeStyles.None, out parsedTime))
                        {
                            flightBoxData.MovementDateTime = flightBoxData.MovementDateTime.AddHours(parsedTime.Hour).AddMinutes(parsedTime.Minute);
                        }
                        else
                        {
                            OnLogEventRaised($"Warnung beim Konvertieren der Zeit auf Zeile {lineNr}. Zu konvertierende Zeit: {flightBoxData.MovementTime}");
                        }

                        flightBoxData.Runway = values[9];
                        flightBoxData.TypePi = values[10];
                        flightBoxData.DirectionOfDeparture = values[11];
                        flightBoxData.CID          = values[12];
                        flightBoxData.CreationDate = values[13];
                        flightBoxData.CreationTime = values[14];

                        if (DateTime.TryParseExact(flightBoxData.CreationDate, "yyyyMMdd", null, DateTimeStyles.None, out parsedDate))
                        {
                            flightBoxData.CreationDateTime = parsedDate;
                        }
                        else
                        {
                            OnLogEventRaised($"Warnung beim Konvertieren des Datums auf Zeile {lineNr}. Zu konvertierendes Datum: {flightBoxData.CreationDate}");
                        }

                        if (DateTime.TryParseExact(flightBoxData.CreationTime, "Hmm", null, DateTimeStyles.None, out parsedTime))
                        {
                            flightBoxData.CreationDateTime = flightBoxData.CreationDateTime.AddHours(parsedTime.Hour).AddMinutes(parsedTime.Minute);
                        }
                        else
                        {
                            OnLogEventRaised($"Warnung beim Konvertieren der Zeit auf Zeile {lineNr}. Zu konvertierende Zeit: {flightBoxData.CreationTime}");
                        }

                        flightBoxData.Key          = values[15];
                        flightBoxData.MemberNumber = values[16];
                        flightBoxData.Lastname     = values[17];

                        if (string.IsNullOrWhiteSpace(flightBoxData.Lastname))
                        {
                            errorLines++;
                            OnLogEventRaised($"Fehlerhafte Zeile {lineNr}. Kein Nachname in Zeile vorhanden. {line}");
                            continue;
                        }

                        flightBoxData.MaxTakeOffWeight = System.Convert.ToInt32(values[18]);
                        flightBoxData.Club             = values[19];
                        flightBoxData.IsHomebased      = values[20] == "1";
                        flightBoxData.OriginalLocation = values[21];
                        flightBoxData.Remarks          = values[22];
                        flightBoxData.SetNextDataRecordId();
                    }
                    catch (Exception e)
                    {
                        errorLines++;
                        OnLogEventRaised($"Fehler beim Konvertieren der Zeile {lineNr}. Message: {e.Message}");
                    }

                    flightBoxDataList.Add(flightBoxData);
                    lastLineFlightBoxData = flightBoxData;
                }

                OnLogEventRaised($"Import durchgeführt. {lineNr} Zeilen eingelesen. Davon {headLines} Kopfzeilen, {additionalLines} Zusatzlinien (Kommentare), {errorLines} fehlerhafte Zeilen ergibt {flightBoxDataList.Count} Datensätze.");
            }

            return(flightBoxDataList);
        }
Esempio n. 2
0
 public ProffixData(FlightBoxData flightBoxData)
 {
     FlightBoxData = flightBoxData;
     MemberNumber  = flightBoxData.MemberNumber;
 }