Ejemplo n.º 1
0
        private static EscapingOptions GetCsvEscapingOptions(CsvParams csvParams)
        {
            var    ret            = new EscapingOptions();
            string quoteCharRegex = Regex.Escape(new string(csvParams.QuoteChar, 1));
            var    escapeFmt      =
                "CSV_UNESCAPE({0}, '"
                + (csvParams.QuoteChar == '\'' ? @"\'" : ("" + csvParams.QuoteChar))
                + "')";

            if (csvParams.Quoting == CsvParams.QuotingMode.Always)
            {
                ret.QuoteRegex     = string.Format("{1}{0} # quoting always", quoteCharRegex, Environment.NewLine);
                ret.EscapingFormat = escapeFmt;
            }
            else if (csvParams.Quoting == CsvParams.QuotingMode.Auto)
            {
                ret.QuoteRegex     = string.Format("{1}{0}? # possible quoting", quoteCharRegex, Environment.NewLine);
                ret.EscapingFormat = escapeFmt;
            }
            else
            {
                ret.QuoteRegex     = "";
                ret.EscapingFormat = "{0}";
            }
            return(ret);
        }
Ejemplo n.º 2
0
 private static string GetCsvDelimiterRegex(CsvParams csvParams)
 {
     if (csvParams.Delimiter == CsvParams.AutoDelimiter)
     {
         return(@"[\,\;]");
     }
     return(Regex.Escape(csvParams.Delimiter));
 }
Ejemplo n.º 3
0
        public static void GenerateCsvLayoutConfig(
            XmlElement root,
            CsvParams csvParams,
            ImportLog log
            )
        {
            if (csvParams.FalalLoadingError != null)
            {
                log.AddMessage(ImportLog.MessageType.BadLayout, ImportLog.MessageSeverity.Error).AddText(csvParams.FalalLoadingError);
                log.FailIfThereIsError();
            }

            var columnsRegexps = csvParams.ColumnLayouts.ToDictionary(column => column.Key, column => ParseLayout(column.Value));

            var escapingOptions = GetCsvEscapingOptions(csvParams);
            var delimiterRegex  = GetCsvDelimiterRegex(csvParams);

            var configBuilder = new ConfigBuilder(log, escapingOptions);

            configBuilder.HeaderReBuilder.Append("^");
            int columnIdx = 0;

            foreach (var column in columnsRegexps)
            {
                using (new ScopedGuard(() => log.StartHandlingLayout(column.Key), () => log.StopHandlingLayout()))
                {
                    if (columnIdx == 0)
                    {
                        ValidateFirstHeaderRegex(column.Value, log);
                    }
                    ReportUnknownRenderers(column.Value, log);
                    ReportMatchabilityProblems(column.Value, log);

                    if (columnIdx > 0)
                    {
                        configBuilder.HeaderReBuilder.AppendFormat(
                            "{0}{1} # CSV separator", Environment.NewLine, delimiterRegex);
                    }

                    configBuilder.HeaderReBuilder.Append(escapingOptions.QuoteRegex);

                    configBuilder.AddLayoutRegexps(column.Value, column.Key);

                    configBuilder.HeaderReBuilder.Append(escapingOptions.QuoteRegex);

                    ++columnIdx;
                }
            }

            configBuilder.GenerateConfig(root);
        }
Ejemplo n.º 4
0
 public static void GenerateRegularGrammarElementForCSVLayout(XmlElement formatRootElement, CsvParams csvParams, ImportLog importLog)
 {
     importLog.Clear();
     ConfigGeneration.GenerateCsvLayoutConfig(formatRootElement, csvParams, importLog);
 }