using DevExpress.Pdf; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace BeWo.Service.Import.AvisImport { public class LvrAvisTextReader { public virtual List LeseAvise(String text) { List avise = new List(); var klientenListe = CreateKlientenBereiche(text); foreach (var kg in klientenListe) { foreach (var mb in kg.CreateMonatsBereiche()) { avise.AddRange(mb.LeseEinzelAvise()); } } return avise; } private List CreateKlientenBereiche(string text) { var bereiche = new List(); var lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); int index = 0; while (index < lines.Length) { var line = lines[index++]; if (line.StartsWith("GP:")) { StringBuilder textBereich = new StringBuilder(); textBereich.AppendLine(line); //Start eines Bereichs beginnt immer mit "GP:" //Suche Aktenzeichen. Das Aktenzeichen kann auch in der nächsten Zeile stehen String aktenzeichen = line.Replace("GP:", "").Trim(); var match = Regex.Match(aktenzeichen, "[0-9]+"); //Lese alle zusammenhängenden Ziffern, Leerzeichen, Sonderzeichen etc. werden nicht berücksichtigt. aktenzeichen = match.Value; while (String.IsNullOrWhiteSpace(aktenzeichen) && index < lines.Length) { line = lines[index++]; textBereich.AppendLine(line); match = Regex.Match(line, "[0-9]+"); aktenzeichen = match.Value; } var bereich = new LvrAvisKlientGesamt(aktenzeichen); bool endeBereich = false; while (index < lines.Length && !endeBereich) { line = lines[index++]; textBereich.AppendLine(line); //Die Bereiche werden immer mit dem Aktenzeichen abgeschlossen. Nimm also alle Zeilen bis obiges Aktenzeichen erneut gefunden wird. if (line.Contains(aktenzeichen)) { endeBereich = true; bereich.GesamtText = textBereich.ToString(); bereiche.Add(bereich); } } } } return bereiche; } } }