using uCalcSoftware; var uc = new uCalc(); using (var validator = new uCalc.Transformer()) { // 1. Configure the transformer validator.DefaultRuleSet.StatementSensitive = false; validator.SkipOver(";{line}"); // Ignore comments // 2. Define rules with validation constraints var serverRule = validator.Pattern("'['Server']' {body}").SetMinimum(1).SetMaximum(1); serverRule.Description = "Server Section"; var local_t = serverRule.LocalTransformer; var hostRule = local_t.Pattern("Host = {@Alpha}").SetMinimum(1).SetMaximum(1); hostRule.Description = "Host Key"; var portRule = local_t.Pattern("Port = {@Number}").SetMinimum(1); portRule.Description = "Port Key"; // --- Test Data --- var validConfig = "[Server]\nHost = db1\nPort = 1433"; var invalidConfig = "Host = web1\nPort = 80"; // Missing [Server] section // --- Validate validConfig --- Console.WriteLine("--- Validating valid_config.ini ---"); validator.SetText(validConfig).Find(); Console.WriteLine($" Server section check passed: {serverRule.Matches.Count() == 1}"); Console.WriteLine($" Host key check passed: {hostRule.Matches.Count() == 1}"); Console.WriteLine($" Port key check passed: {portRule.Matches.Count() >= 1}"); Console.WriteLine(""); // --- Validate invalidConfig --- Console.WriteLine("--- Validating invalid_config.ini ---"); validator.SetText(invalidConfig).Find(); Console.WriteLine($" Server section check passed: {serverRule.Matches.Count() == 1}"); // The host and port rules will have 0 matches because their parent rule (serverRule) failed. Console.WriteLine($" Host key check passed: {hostRule.Matches.Count() == 1}"); Console.WriteLine($" Port key check passed: {portRule.Matches.Count() >= 1}"); }