Exemplo n.º 1
0
        public void OneMutipleLineLineWithDifferentLineSeparators2Test()
        {
            var test   = "default;value;\"bla\";\"test\r\nsecond\";line\nthird\rfourth";
            var result = new CsvLineReader(new StringReader(test), ';', '"').ReadLine();

            Assert.Equal("test\r\nsecond", result[3]);
        }
Exemplo n.º 2
0
        public void OneSingleLineTest()
        {
            var test     = "default;value;\"bla\";test\r";
            var result   = new CsvLineReader(new StringReader(test)).ReadLine();
            var expected = "bla";

            Assert.Equal(expected, result[2]);
        }
Exemplo n.º 3
0
        public void OneMutipleLineLineTest()
        {
            var test   = "first\r\nsecond";
            var reader = new CsvLineReader(new StringReader(test));

            reader.ReadLine();
            var second   = reader.ReadLine();
            var expected = "second";

            Assert.Equal(expected, second[0]);
        }
Exemplo n.º 4
0
        public void OneMutipleLineLineWithDifferentLineSeparatorsTest()
        {
            var test   = "default;value;\"bla\";test\r\nsecond;line\nthird\rfourth";
            var reader = new CsvLineReader(new StringReader(test));
            var first  = reader.ReadLine();
            var second = reader.ReadLine();
            var third  = reader.ReadLine();
            var fourth = reader.ReadLine();


            Assert.Equal("third", third[0]);
            Assert.Equal("fourth", fourth[0]);
        }
Exemplo n.º 5
0
        static PhpArray ReadLineCsv(CsvLineReader reader, char delimiter /*=','*/, char enclosure /*='"'*/, char escape_char /*= '\\'*/)
        {
            // collect results
            PhpArray result = new PhpArray();

            int    i    = 0;        // index of currently scanned char
            string line = reader(); // currently scanned string
            bool   eof  = false;

            if (line == null)
            {
                result.Add(null);
                return(result);
            }

            for (; ;)
            {
                Debug.Assert(i - 1 < line.Length);
                bool previous_field_delimited = (i == 0 || line[i - 1] == delimiter);

                // skip initial whitespace:
                while (i < line.Length && Char.IsWhiteSpace(line[i]) && line[i] != delimiter)
                {
                    ++i;
                }

                if (i >= line.Length)
                {
                    if (result.Count == 0)
                    {
                        result.Add(null);
                    }
                    else if (previous_field_delimited)
                    {
                        result.Add(string.Empty);
                    }

                    break;
                }
                else if (line[i] == delimiter)
                {
                    if (previous_field_delimited)
                    {
                        result.Add(string.Empty);
                    }
                    ++i;
                }
                else if (line[i] == enclosure)
                {
                    // enclosed string follows:
                    int start         = ++i;
                    var field_builder = new StringBuilder();

                    for (; ;)
                    {
                        // read until enclosure character found:
                        while (i < line.Length && line[i] != enclosure)
                        {
                            if (i + 1 < line.Length && line[i] == escape_char)
                            {
                                ++i; // skip escape char
                            }
                            ++i;     // skip following char
                        }

                        // end of line:
                        if (i == line.Length)
                        {
                            // append including eoln:
                            field_builder.Append(line, start, line.Length - start);

                            // field continues on the next line:
                            string nextLine = reader();
                            if (nextLine == null)
                            {
                                eof = true;
                                break;
                            }

                            line  = nextLine;
                            start = i = 0;
                        }
                        else
                        {
                            Debug.Assert(line[i] == enclosure);
                            i++;

                            if (i < line.Length && line[i] == enclosure)
                            {
                                // escaped enclosure; add previous text including enclosure:
                                field_builder.Append(line, start, i - start);
                                start = ++i;
                            }
                            else
                            {
                                // end of enclosure:
                                field_builder.Append(line, start, i - 1 - start);
                                start = i;
                                break;
                            }
                        }
                    }

                    if (!eof)//if (!stream.Eof)
                    {
                        Debug.Assert(start == i && line.Length > 0);

                        int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);

                        field_builder.Append(line, start, end - start);
                    }

                    //result.Add(Core.Convert.Quote(field_builder.ToString(), context));
                    //result.Add(StringUtils.EscapeStringCustom(field_builder.ToString(), charsToEscape, escape));
                    result.Add(field_builder.ToString());
                }
                else
                {
                    // disclosed text:

                    int start = i;
                    int end   = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);

                    //result.Add( Core.Convert.Quote(line.Substring(start, end - start), context));
                    //result.Add(StringUtils.EscapeStringCustom(line.Substring(start, end - start), charsToEscape, escape));
                    result.Add(line.Substring(start, end - start));
                }
            }

            return(result);
        }
Exemplo n.º 6
0
        private static PhpArray ReadLineCsv( CsvLineReader reader, char delimiter/*=','*/, char enclosure/*='"'*/, char escape_char /*= '\\'*/ )
        {
            // collect results
            PhpArray result = new PhpArray();

            int i = 0;  // index of currently scanned char
            string line = reader(); // currently scanned string
            bool eof = false;

            if (line == null)
            {
                result.Add(null);
                return result;
            }

            for (; ; )
            {
                Debug.Assert(i - 1 < line.Length);
                bool previous_field_delimited = (i == 0 || line[i - 1] == delimiter);

                // skip initial whitespace:
                while (i < line.Length && Char.IsWhiteSpace(line[i]) && line[i] != delimiter)
                    ++i;

                if (i >= line.Length)
                {
                    if (result.Count == 0)
                        result.Add(null);
                    else if (previous_field_delimited)
                        result.Add(string.Empty);

                    break;
                }
                else if (line[i] == delimiter)
                {
                    if (previous_field_delimited)
                        result.Add(string.Empty);
                    ++i;
                }
                else if (line[i] == enclosure)
                {
                    // enclosed string follows:
                    int start = ++i;
                    StringBuilder field_builder = new StringBuilder();

                    for (; ; )
                    {
                        // read until enclosure character found:
                        while (i < line.Length && line[i] != enclosure)
                        {
                            if (i + 1 < line.Length && line[i] == escape_char)
                                ++i;// skip escape char

                            ++i;    // skip following char
                        }

                        // end of line:
                        if (i == line.Length)
                        {
                            // append including eoln:
                            field_builder.Append(line, start, line.Length - start);

                            // field continues on the next line:
                            string nextLine = reader();
                            if (nextLine == null)
                            {
                                eof = true;
                                break;
                            }

                            line = nextLine;
                            start = i = 0;
                        }
                        else
                        {
                            Debug.Assert(line[i] == enclosure);
                            i++;

                            if (i < line.Length && line[i] == enclosure)
                            {
                                // escaped enclosure; add previous text including enclosure:
                                field_builder.Append(line, start, i - start);
                                start = ++i;
                            }
                            else
                            {
                                // end of enclosure:
                                field_builder.Append(line, start, i - 1 - start);
                                start = i;
                                break;
                            }
                        }
                    }

                    if (!eof)//if (!stream.Eof)
                    {
                        Debug.Assert(start == i && line.Length > 0);

                        int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);

                        field_builder.Append(line, start, end - start);
                    }

                    //result.Add(Core.Convert.Quote(field_builder.ToString(), context));
                    //result.Add(StringUtils.EscapeStringCustom(field_builder.ToString(), charsToEscape, escape));
                    result.Add(field_builder.ToString());
                }
                else
                {
                    // disclosed text:

                    int start = i;
                    int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);

                    //result.Add( Core.Convert.Quote(line.Substring(start, end - start), context));
                    //result.Add(StringUtils.EscapeStringCustom(line.Substring(start, end - start), charsToEscape, escape));
                    result.Add(line.Substring(start, end - start));
                }
            }

            return result;
        }
Exemplo n.º 7
0
        private async Task ProcessCsvFile(SqlConnection conn)
        {
            CsvLineReader csv = new CsvLineReader(this._fileReader);

            for (int i = 1; ; i++)
            {
                CsvReadRecordResult result = csv.Read();
                if (result.LineResult != CsvReadLineResult.Success)
                {
                    break;
                }

                if (result.Fields.Count == 12)
                {
                    CreatePaymentResult cpr;
                    Payment             payment   = null;
                    Exception           exception = null;
                    using (SqlTransaction tx = conn.BeginTransaction())
                    {
                        (cpr, payment, exception) = await this.ProcessPayment(result.Fields, conn, tx);

                        tx.Commit();
                    }

                    DiagOptions o = DiagOptions.Tech;
                    string      message;
                    if (cpr == CreatePaymentResult.Success)
                    {
                        o       = DiagOptions.Tech | DiagOptions.Biz;
                        message = "SbReg (" + _sourceFileName + "): Платёж " + payment.Id.ToString() +
                                  (payment.Status == Share.PaymentStatus.Approved ? " успешно проведён" : " ожидает подтверждения") + ": " + payment.RawData;
                    }
                    else if (cpr == CreatePaymentResult.Duplicate)
                    {
                        message = "SbReg (" + _sourceFileName + "): Платёж уже обработан: " + payment.RawData;
                        await this._logger.WriteLine(i, "Платёж \"" + result.Fields[3] + "; " + result.Fields[4] + "\" уже создан");
                    }
                    else
                    {
                        message = "SbReg (" + _sourceFileName + "): Ошибка \"" + exception.Message + "\" при проведении платежа: " + payment.RawData;
                        await this._logger.WriteLine(i, exception.ToString());
                    }

                    Helper.SaveDiagMessage(_sqlServer, o, message, null);
                }
                else if (result.Fields.Count == 6)
                {
                    try
                    {
                        await this.ProcessTotal(result.Fields);
                    }
                    catch (Exception ex)
                    {
                        await this._logger.Write("Ошибка при обработке итоговой строки: " + ex.ToString(), true);
                    }
                }
                else
                {
                    await this._logger.WriteLine(i, "Строка неопознанного формата");
                }
            }
        }