Exemple #1
0
        public Statement ExtractStatement(string filename, bool generateInterimFiles)
        {
            var textStream = Routines.ExtractPdfText(filename, new TextExtractStrategy());

            if (generateInterimFiles)
            {
                Routines.WriteStreamToFile(textStream, filename + ".txt");
            }

            using (var textReader = new StreamReader(textStream))
            {
                var statement          = new Statement();
                var statementDateNoted = false;

                while (!textReader.EndOfStream)
                {
                    var line  = textReader.ReadLine();
                    var items = line?.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    if (!statementDateNoted && items[0].StartsWith("Statement From", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var dates = items[0].Substring("Statement From ".Length).Split(new[] { " TO " }, StringSplitOptions.RemoveEmptyEntries);
                        if (dates.Length == 2)
                        {
                            statement.StatementDate = DateTime.Parse(dates[1]);
                            statementDateNoted      = true;
                        }
                    }
                    else if (items.Length == 4 && Routines.IsNumeric(items[3]) && Routines.IsShortMonthAndDay(items[0]) && Routines.IsShortMonthAndDay(items[1])) // Process date
                    {
                        var t = new Transaction();

                        var tokens = items[0].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        var month = Routines.ShortMonthToInt(tokens[0]);
                        var day   = Routines.StrToInt(tokens[1]);
                        var year  = statement.StatementDate.Year - ((statement.StatementDate.Month == 1 && month == 12) ? 1 : 0);
                        t.DateTime = new DateTime(year, month, day);

                        t.Description = items[2];
                        t.Value       = -Routines.StrToNumber(items[3]);

                        statement.Transactions.Add(t);
                    }
                }

                return(statement);
            }
        }