예제 #1
0
    private bool OnRenameLayout(string layoutName)
    {
        string oldName = (string)m_SavedLayoutListBox.SelectedItem;

        if (oldName.Equals(layoutName))
        {
            return(true);
        }
        if (CsvLayoutManager.Instance.ExistSpecific(layoutName))
        {
            MessageBox.Show(string.Format("", layoutName), "提示", MessageBoxButtons.OK);
            return(false);
        }

        CsvLayout layout = CsvLayoutManager.Instance.LoadOrCreateSpecific(oldName);

        layout.Key = layoutName;
        CsvLayoutManager.Instance.SaveSpecific();

        int selectedIdx = m_SavedLayoutListBox.SelectedIndex;

        UpdateListBox();
        m_SavedLayoutListBox.SelectedIndex = selectedIdx;
        UpdateButtonEnable();
        return(true);
    }
예제 #2
0
    public void LoadLayout()
    {
        m_Layout = CsvLayoutManager.Instance.LoadOrCreate(SourcePath);

        LoadCellSize();
        LoadFrozen();
    }
예제 #3
0
        public void SplitsSimpleDelimitedLine()
        {
            var splitLineParams = new CsvLayout(Quote: '"', Delimiter: ';');
            var result          = Split("1;2;3", splitLineParams);

            CollectionAssert.AreEqual(new[] { "1", "2", "3" }, result);
        }
예제 #4
0
        public void TrimsTrailingWhitespaceOfUnquotedField()
        {
            var splitLineParams = new CsvLayout('"', ';');
            var result          = Split("1;2;3 \t", splitLineParams);

            CollectionAssert.AreEqual(new[] { "1", "2", "3" }, result);
        }
예제 #5
0
        public void CsvLayout_Format_NullTextWriter_ArgumentNullException()
        {
            var fakeLoggingEvent = new LoggingEvent(new LoggingEventData());
            var underTest        = new CsvLayout();

            Assert.Throws <ArgumentNullException>(() => underTest.Format(null, fakeLoggingEvent));
        }
예제 #6
0
		public void StripsQuotes()
		{
			const string line = @"""FieldContent""";
			var splitLineParams = new CsvLayout('"', ',');
			var result = Split(line, splitLineParams);
			CollectionAssert.AreEqual(new[]{"FieldContent"}, result);
		}
예제 #7
0
		public void TrimsTrailingWhitespaceFromUnquotedField()
		{
			const string line = @"x,y   ,z";
			var splitLineParams = new CsvLayout('"', ',');
            var result = Split(line, splitLineParams);
            CollectionAssert.AreEqual(new[] { "x", "y", "z" }, result);
		}
예제 #8
0
        private LoggingConfiguration GetLoggingConfiguration()
        {
            CsvLayout layout = new CsvLayout()
            {
                Delimiter = CsvColumnDelimiterMode.Semicolon,
            };

            layout.Columns.Add(new CsvColumn("time", @"${date:format=HH\:mm\:ss}"));
            layout.Columns.Add(new CsvColumn("level", "${level:upperCase=true}"));
            layout.Columns.Add(new CsvColumn("callsite", "${callsite:includeSourcePath=false}"));
            layout.Columns.Add(new CsvColumn("message", "${message}"));
            layout.Columns.Add(new CsvColumn("exception", "${exception:format=ToString}"));
            layout.Columns.Add(new CsvColumn("stacktrace", "${onexception:inner=${stacktrace:topFrames=10}}"));

            FileTarget fileTarget = new FileTarget("file")
            {
                FileName        = "${var:LogPath}/logs/${shortdate}.log",
                Layout          = layout,
                MaxArchiveFiles = 3,
                ArchiveEvery    = FileArchivePeriod.Day,
            };

            LoggingConfiguration configuration = new LoggingConfiguration();

            configuration.AddTarget(fileTarget);
            configuration.AddRuleForAllLevels(fileTarget);

            StorageFolder storageFolder = ApplicationData.Current.LocalFolder;

            configuration.Variables["LogPath"] = storageFolder.Path;

            return(configuration);
        }
예제 #9
0
		public void SupportsFieldsWithEscapedQuotes()
		{
			const string line = "x \"y\",z";
			var splitLineParams = new CsvLayout('"', ',');
            var result = Split(line, splitLineParams);
            CollectionAssert.AreEqual(new[] { "x \"y\"", "z" }, result);
		}
예제 #10
0
        private static IEnumerable <string> Split(string line, CsvLayout splitLineParams, CsvBehaviour behaviour)
        {
            var splitter = new CsvStateMachine(new StringReader(line), splitLineParams, behaviour);
            var result   = splitter.Lines();

            return(result.First().Fields);
        }
예제 #11
0
        public void DoesNotTrimTrailingWhitespaceOfQuotedField()
        {
            var splitLineParams = new CsvLayout('"', ';');
            var result          = Split("1;2;\"3 \t\"", splitLineParams);

            CollectionAssert.AreEqual(new[] { "1", "2", "3 \t" }, result);
        }
예제 #12
0
 public CsvDataReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, IConverter converter)
 {
     _parser     = new CsvParser(reader, csvLayout, csvBehaviour);
     _header     = _parser.Header;
     _line       = null;
     _converter  = converter;
     _enumerator = _parser.GetEnumerator();
 }
예제 #13
0
        public void StripsQuotes()
        {
            const string line            = @"""FieldContent""";
            var          splitLineParams = new CsvLayout('"', ',');
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "FieldContent" }, result);
        }
예제 #14
0
        public void TrimsTrailingWhitespaceFromUnquotedField()
        {
            const string line            = @"x,y   ,z";
            var          splitLineParams = new CsvLayout('"', ',');
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "x", "y", "z" }, result);
        }
예제 #15
0
        public void SupportsFieldsWithEscapedQuotes()
        {
            const string line            = "x \"y\",z";
            var          splitLineParams = new CsvLayout('"', ',');
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "x \"y\"", "z" }, result);
        }
예제 #16
0
        public void CsvLayout_ActivateOptions_DefaultFields_Success()
        {
            var underTest = new CsvLayout();

            underTest.ActivateOptions();

            Assert.AreEqual(CsvLayout.DefaultPattern, underTest.Fields);
        }
예제 #17
0
        public void WhenValueTrimmingIsNone_LastFieldHasLeadingAndTrailingWhitespace_WhitespaceIsNotTrimmed()
        {
            const string line            = "x,y, z ";
            var          splitLineParams = new CsvLayout('"', ',', '"');
            var          result          = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));

            CollectionAssert.AreEqual(new[] { @"x", "y", " z " }, result);
        }
예제 #18
0
        public void CarriageReturnCanBeUsedAsDelimiter()
        {
            const string line            = "1\r2\n";
            var          splitLineParams = new CsvLayout('"', '\r');
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "1", "2" }, result);
        }
예제 #19
0
        public void EscapeCharacterInsideQuotedStringIsEscaped()
        {
            const string line            = @"""\\""";
            var          splitLineParams = new CsvLayout('"', ',', '\\');
            var          result          = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));

            Assert.AreEqual(@"\", result.Single());
        }
예제 #20
0
        public void LineWithOnlySeparatorIsSplitIntoTwoEmptyStrings()
        {
            const string line            = ",";
            var          splitLineParams = new CsvLayout('"', ',', '\\');
            var          result          = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));

            CollectionAssert.AreEqual(new[] { "", "" }, result);
        }
예제 #21
0
        public void EmptyFields()
        {
            const string line            = @",x,,y";
            var          splitLineParams = new CsvLayout('"', ',');
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "", "x", "", "y" }, result);
        }
예제 #22
0
 public CsvStateMachine(TextReader textReader, CsvLayout csvLayout, CsvBehaviour behaviour, bool debug = false)
 {
     _textReader = textReader;
     _csvLayout  = csvLayout;
     _behaviour  = behaviour;
     _debug      = debug;
     TransitionTo(BeginningOfLine);
 }
예제 #23
0
        public void CsvLayoutRenderingAutoQuoting()
        {
            var csvLayout = new CsvLayout()
            {
                Quoting = CsvQuotingMode.Auto,
                Columns =
                {
                    new CsvColumn("date",         "${longdate}"),
                    new CsvColumn("level",        "${level}"),
                    new CsvColumn("message;text", "${message}"),
                },
                QuoteChar = "'",
                Delimiter = CsvColumnDelimiterMode.Semicolon,
            };

            // no quoting
            Assert.Equal(
                "2010-01-01 12:34:56.0000;Info;hello, world",
                csvLayout.Render(new LogEventInfo
            {
                TimeStamp = new DateTime(2010, 01, 01, 12, 34, 56),
                Level     = LogLevel.Info,
                Message   = "hello, world"
            }));

            // multi-line string - requires quoting
            Assert.Equal(
                "2010-01-01 12:34:56.0000;Info;'hello\rworld'",
                csvLayout.Render(new LogEventInfo
            {
                TimeStamp = new DateTime(2010, 01, 01, 12, 34, 56),
                Level     = LogLevel.Info,
                Message   = "hello\rworld"
            }));

            // multi-line string - requires quoting
            Assert.Equal(
                "2010-01-01 12:34:56.0000;Info;'hello\nworld'",
                csvLayout.Render(new LogEventInfo
            {
                TimeStamp = new DateTime(2010, 01, 01, 12, 34, 56),
                Level     = LogLevel.Info,
                Message   = "hello\nworld"
            }));

            // quote character used in string, will be quoted and doubled
            Assert.Equal(
                "2010-01-01 12:34:56.0000;Info;'hello''world'",
                csvLayout.Render(new LogEventInfo
            {
                TimeStamp = new DateTime(2010, 01, 01, 12, 34, 56),
                Level     = LogLevel.Info,
                Message   = "hello'world"
            }));

            Assert.Equal("date;level;'message;text'", csvLayout.Header.Render(LogEventInfo.CreateNullEvent()));
        }
예제 #24
0
 public CsvDataReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, CultureInfo cultureInfo)
 {
     _parser     = new CsvParser(reader, csvLayout, csvBehaviour);
     _header     = _parser.Header;
     _line       = null;
     _converter  = new Converter(cultureInfo ?? CultureInfo.InvariantCulture);
     _enumerator = _parser.GetEnumerator();
     _schema     = csvLayout.Schema;
 }
예제 #25
0
    /// <summary>
    /// 应用布局
    /// </summary>
    private void OnApplyLayoutToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ToolStripMenuItem item   = (ToolStripMenuItem)sender;
        CsvLayout         layout = CsvLayoutManager.Instance.LoadOrCreateSpecific(item.Name);

        CsvLayoutManager.Instance.Replace(m_CsvForm.GetLayout(), layout);
        CsvLayoutManager.Instance.Save();
        m_CsvForm.LoadLayout();
    }
예제 #26
0
        public void QuotedStringWithDelimiter()
        {
            // "x ""y"", z"
            const string line            = "\"x \"y\" z, u\",v";
            var          splitLineParams = new CsvLayout();
            var          result          = Split(line, splitLineParams);

            CollectionAssert.AreEqual(new[] { "x \"y\" z, u", "v" }, result);
        }
예제 #27
0
        public void CanWorkWithMultilineField()
        {
            const string data            = @"a,b,""line1
line2""";
            var          splitLineParams = new CsvLayout('"', ',', '\\');
            var          result          = Split(data, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));

            CollectionAssert.AreEqual(new[] { "a", "b", @"line1
line2" }, result);
        }
예제 #28
0
 public static void AddMeterColumns(this CsvLayout layout)
 {
     AddDateColumns(layout);
     layout.Columns.Add(new CsvColumn("Count", new SimpleLayout("${event-context:item=Count}")));
     layout.Columns.Add(new CsvColumn("Mean Rate", new SimpleLayout("${event-context:item=Mean Rate}")));
     layout.Columns.Add(new CsvColumn("One Minute Rate", new SimpleLayout("${event-context:item=One Minute Rate}")));
     layout.Columns.Add(new CsvColumn("Five Minute Rate", new SimpleLayout("${event-context:item=Five Minute Rate}")));
     layout.Columns.Add(new CsvColumn("Fifteen Minute Rate", new SimpleLayout("${event-context:item=Fifteen Minute Rate}")));
     layout.Columns.Add(new CsvColumn("Rate Unit", new SimpleLayout("${event-context:item=Rate Unit}")));
 }
예제 #29
0
        private LoggingConfiguration BuildLoggingConfiguration()
        {
            var loggingConfiguration = new LoggingConfiguration();

            var columns = new List <CsvColumn>()
            {
                new CsvColumn("DateTime", "${longdate}")
                {
                    Quoting = CsvQuotingMode.Nothing
                },
                new CsvColumn("Level", "${level:upperCase=true}")
                {
                    Quoting = CsvQuotingMode.Nothing
                },
                new CsvColumn("Message", "${message}")
                {
                    Quoting = CsvQuotingMode.All
                },
                new CsvColumn("Exception", "${exception:format=ToString}")
                {
                    Quoting = CsvQuotingMode.All
                },
                new CsvColumn("CallSite", "${callsite}")
                {
                    Quoting = CsvQuotingMode.All
                },
                new CsvColumn("CallSiteLineNumber", "${callsite-linenumber}")
                {
                    Quoting = CsvQuotingMode.Nothing
                },
                new CsvColumn("StackTrace", "${stacktrace:topFrames=5}")
                {
                    Quoting = CsvQuotingMode.All
                },
            };

            var csvLayout = new CsvLayout();

            foreach (var column in columns)
            {
                csvLayout.Columns.Add(column);
            }

            var fileTarget = new FileTarget("FileTarget")
            {
                FileName = "${basedir}/Logs/${date:format=yyyy-MM-dd}.csv",
                Layout   = csvLayout,
            };

            loggingConfiguration.AddTarget(fileTarget);

            loggingConfiguration.AddRuleForAllLevels(fileTarget);

            return(loggingConfiguration);
        }
예제 #30
0
    public CsvParser(TextReader textReader, CsvLayout layOut, CsvBehaviour behaviour)
    {
        _csvStateMachine = new CsvStateMachine(textReader, layOut, behaviour);
        _enumerator      = _csvStateMachine.Lines().GetEnumerator();
        _textReader      = textReader;

        var firstLine = Lines().FirstOrDefault();

        Header = (layOut, firstLine) switch
        {
            ({ HasHeaders : true }, firstLine : not null)
예제 #31
0
 public static void AddDateColumns(this CsvLayout layout)
 {
     if (!layout.Columns.Any(l => l.Name == "Date"))
     {
         layout.Columns.Add(new CsvColumn("Date", new SimpleLayout("${event-context:item=Date}")));
     }
     if (!layout.Columns.Any(l => l.Name == "Ticks"))
     {
         layout.Columns.Add(new CsvColumn("Ticks", new SimpleLayout("${event-context:item=Ticks}")));
     }
 }
예제 #32
0
        public static void CreateLogger(string loglevel)
        {
            // Create Tab format
            CsvLayout layout = new CsvLayout();

            layout.Delimiter = CsvLayout.ColumnDelimiterMode.Tab;
            layout.Columns.Add(new CsvColumn("date", "${longdate}"));
            layout.Columns.Add(new CsvColumn("level", "${level}"));
            layout.Columns.Add(new CsvColumn("message", "${message}"));
            layout.Columns.Add(new CsvColumn("exception", "${exception:format=tostring}"));


            FileTarget target = new FileTarget();

            target.FileName         = "${basedir}/QueryLog.txt";
            target.CompiledLayout   = layout;
            target.ArchiveFileName  = "${basedir}/archives/Querylog.{#####}.txt";
            target.ArchiveAboveSize = 1000 * 1024; // archive files greater than 10 KB
            target.ArchiveNumbering = FileTarget.ArchiveNumberingMode.Sequence;

            LogLevel level;

            switch (loglevel.ToLower())
            {
            case "trace":
                level = LogLevel.Trace;
                break;

            case "debug":
                level = LogLevel.Debug;
                break;

            case "warn":
                level = LogLevel.Warn;
                break;

            case "error":
                level = LogLevel.Error;
                break;

            case "fatal":
                level = LogLevel.Fatal;
                break;

            default:
                level = LogLevel.Info;
                break;
            }

            NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, level);

            logger = LogManager.GetLogger("Query");
        }
예제 #33
0
        public void WorksWithQuotedStringInsideQuotedField()
        {
            var data1 = @"""1"";"" 2  ""inside""  x "";3";

            var csvLayout = new CsvLayout('\"', ';');

            var splitter = new CsvStateMachine(new StringReader(data1), csvLayout, new CsvBehaviour());

            var result = splitter.Lines().ToArray();

            CollectionAssert.AreEqual(new[] { "1", @" 2  ""inside""  x ", "3" }, result[0].Fields);
        }
예제 #34
0
		public void EmptyFields()
		{
			const string line = @",x,,y";
			var splitLineParams = new CsvLayout('"', ',');
            var result = Split(line, splitLineParams);
            CollectionAssert.AreEqual(new[] { "", "x", "", "y" }, result);
		}
예제 #35
0
        public void MultipleLinesAreSplitCorrectly()
        {
            var data1 = @"1;2;3
4;5;6";

            var csvLayout = new CsvLayout('\"', ';');

            var splitter = new BufferedCsvLineGenerator(new StringReader(data1), csvLayout, new CsvBehaviour());

            var result = splitter.Split().ToArray();

            CollectionAssert.AreEqual(new[] { "1", "2", "3" }, result[0].Fields);
            CollectionAssert.AreEqual(new[] { "4", "5", "6" }, result[1].Fields);

        }
예제 #36
0
 private static IEnumerable<string> Split(string line, CsvLayout splitLineParams, CsvBehaviour behaviour)
 {
     var splitter = new BufferedCsvLineGenerator(new StringReader(line), splitLineParams, behaviour);
     var result = splitter.Split();
     return result.First().Fields;
 }
예제 #37
0
        public void WorksWithQuotedMultilineString()
        {
            var data1 = @"""1"";"" 2  ""in
side""  x "";3";

            var csvLayout = new CsvLayout('\"', ';');

            var splitter = new BufferedCsvLineGenerator(new StringReader(data1), csvLayout, new CsvBehaviour());

            var result = splitter.Split().ToArray();

            CollectionAssert.AreEqual(new[] { "1", @" 2  ""in
side""  x ", "3" }, result[0].Fields);

        }
예제 #38
0
		public void SplitsSimpleDelimitedLine()
		{
            var splitLineParams = new CsvLayout('"', ';');
			var result = Split("1;2;3", splitLineParams);
			CollectionAssert.AreEqual(new[]{"1", "2", "3"}, result);
		}
예제 #39
0
		public void CarriageReturnCanBeUsedAsDelimiter()
		{
			const string line = "1\r2\n";
			var splitLineParams = new CsvLayout('"', '\r');
            var result = Split(line, splitLineParams);
            CollectionAssert.AreEqual(new[] { "1", "2" }, result);
		}
예제 #40
0
		public void LineWithOnlySeparatorIsSplitIntoTwoEmptyStrings()
		{
			const string line = ",";
			var splitLineParams = new CsvLayout('"', ',', '\\');
            var result = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));
            CollectionAssert.AreEqual(new[] { "", "" }, result);
		}
예제 #41
0
		public void QuotedStringWithDelimiter()
		{
            // "x ""y"", z"
			const string line = "\"x \"y\" z, u\",v";
			var splitLineParams = new CsvLayout('"', ',');
            var result = Split(line, splitLineParams);
            CollectionAssert.AreEqual(new[] { "x \"y\" z, u", "v" }, result);

		}
예제 #42
0
		public void CanWorkWithMultilineField()
		{
			const string data = @"a,b,""line1
line2""";
			var splitLineParams = new CsvLayout('"', ',', '\\');
            var result = Split(data, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));
            CollectionAssert.AreEqual(new[] { "a", "b", @"line1
line2" }, result);
		}
예제 #43
0
		public void DoesNotTrimTrailingWhitespaceOfQuotedField()
		{
			var splitLineParams = new CsvLayout('"', ';');
            var result = Split("1;2;\"3 \t\"", splitLineParams);
			CollectionAssert.AreEqual(new[] { "1", "2", "3 \t" }, result);
		}
예제 #44
0
		public void EscapeCharacterInsideQuotedStringIsEscaped()
		{
			const string line = "\"\\\\\"";
			var splitLineParams = new CsvLayout('"', ',', '\\');
            var result = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));
            Assert.AreEqual("\\", result.Single());
		}
예제 #45
0
		public void TrimsTrailingWhitespaceOfUnquotedField()
		{
			var splitLineParams = new CsvLayout('"', ';');
			var result = Split("1;2;3 \t", splitLineParams);
			CollectionAssert.AreEqual(new[] { "1", "2", "3" }, result);
		}
예제 #46
0
		public void WhenValueTrimmingIsNone_LastFieldWithLeadingAndTrailingWhitespace_WhitespaceIsNotTrimmed()
		{
			const string line = "x,y, z ";
			var splitLineParams = new CsvLayout('"', ',', '"');
            var result = Split(line, splitLineParams, new CsvBehaviour(ValueTrimmingOptions.None));
            CollectionAssert.AreEqual(new[] { @"x", "y", " z " }, result);

		}
예제 #47
0
 private static IEnumerable<string> Split(string line, CsvLayout splitLineParams)
 {
     return Split(line, splitLineParams, new CsvBehaviour());
 }