uCalc API Version: 2.1.3-preview.2 Released: 6/16/2026
Warning
uCalc API Preview Release Notice:The documentation describes the intended behavior of the API. The current preview build contains incomplete features, unoptimized performance, and is subject to breaking changes.
Minimum = [int]
Property
Product:
Class:
Gets or sets the minimum number of matches a rule must find for its results to be considered valid.
Remarks
🛡️ Rule-Level Match Threshold: Minimum
The @Minimum property sets a "pass/fail" condition for an individual Rule. If the rule does not find at least the specified minimum number of matches, its results are invalidated and discarded. This does not affect the results of any other rules.
This property is a powerful tool for enforcing structural validation, ensuring that a pattern appears a certain number of times before its matches are considered part of the final result set.
Minimum vs. GlobalMinimum
It is crucial to understand the difference in scope between these two validation properties.
| Property | Scope of Failure | Behavior | Use Case |
|---|---|---|---|
rule.@Minimum(n) (This Property) | Rule-specific | If this rule finds fewer than n matches, only the matches for this rule are discarded. Other rules are unaffected. | When a specific pattern is optional, but if present, must appear at least n times to be valid. |
rule.@GlobalMinimum(n) | Transformer-wide | If this rule finds fewer than n matches, the entire Find, Filter, or Transform operation fails, returning zero matches for all rules. | When the presence of at least n matches from this rule is a mandatory validation check for the entire document. |
⚠️ Performance Considerations
To enable this validation, the Transformer may need to store a backup of the original string. If the @Minimum is not met, the engine discards the rule's results and may re-scan the text with the rule deactivated. This can consume more memory and time than a standard transformation.
💡 Why uCalc? (Comparative Analysis)
In a standard Regex-based workflow, achieving this would require multiple steps in your application code:
- Run the regex search to get all matches for a specific pattern.
- Count the number of matches found.
- Write an
ifstatement in your host language (C#, C++, etc.) to check if the count meets your minimum. - If it doesn't, manually discard the results for that pattern.
uCalc's @Minimum property is declarative. You state your requirement directly on the rule, and the engine handles the validation logic internally. This leads to cleaner, more expressive, and less error-prone code by keeping the validation logic tightly coupled with the pattern it applies to.
Default value: 0
Examples
A succinct example showing how a rule fails if it doesn't meet the minimum match count.
using uCalcSoftware;
var uc = new uCalc();
var t = uc.NewTransformer();
var ruleA = t.FromTo("a", "A");
ruleA.Minimum = 3;
Console.WriteLine("--- Case 1: Fails (only 2 'a's) ---");
t.Transform("a b a b c");
Console.WriteLine($"Result: {t}");
Console.WriteLine($"Matches Found: {t.Matches.Count()}");
Console.WriteLine("");
Console.WriteLine("--- Case 2: Succeeds (3 'a's) ---");
t.Transform("a b a b a c");
Console.WriteLine($"Result: {t}");
Console.WriteLine($"Matches Found: {t.Matches.Count()}");
--- Case 1: Fails (only 2 'a's) ---
Result: a b a b c
Matches Found: 0
--- Case 2: Succeeds (3 'a's) ---
Result: A b A b A c
Matches Found: 3 using uCalcSoftware; var uc = new uCalc(); var t = uc.NewTransformer(); var ruleA = t.FromTo("a", "A"); ruleA.Minimum = 3; Console.WriteLine("--- Case 1: Fails (only 2 'a's) ---"); t.Transform("a b a b c"); Console.WriteLine($"Result: {t}"); Console.WriteLine($"Matches Found: {t.Matches.Count()}"); Console.WriteLine(""); Console.WriteLine("--- Case 2: Succeeds (3 'a's) ---"); t.Transform("a b a b a c"); Console.WriteLine($"Result: {t}"); Console.WriteLine($"Matches Found: {t.Matches.Count()}");
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto t = uc.NewTransformer();
auto ruleA = t.FromTo("a", "A");
ruleA.Minimum(3);
cout << "--- Case 1: Fails (only 2 'a's) ---" << endl;
t.Transform("a b a b c");
cout << "Result: " << t << endl;
cout << "Matches Found: " << t.Matches().Count() << endl;
cout << "" << endl;
cout << "--- Case 2: Succeeds (3 'a's) ---" << endl;
t.Transform("a b a b a c");
cout << "Result: " << t << endl;
cout << "Matches Found: " << t.Matches().Count() << endl;
}
--- Case 1: Fails (only 2 'a's) ---
Result: a b a b c
Matches Found: 0
--- Case 2: Succeeds (3 'a's) ---
Result: A b A b A c
Matches Found: 3 #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto t = uc.NewTransformer(); auto ruleA = t.FromTo("a", "A"); ruleA.Minimum(3); cout << "--- Case 1: Fails (only 2 'a's) ---" << endl; t.Transform("a b a b c"); cout << "Result: " << t << endl; cout << "Matches Found: " << t.Matches().Count() << endl; cout << "" << endl; cout << "--- Case 2: Succeeds (3 'a's) ---" << endl; t.Transform("a b a b a c"); cout << "Result: " << t << endl; cout << "Matches Found: " << t.Matches().Count() << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim t = uc.NewTransformer()
Dim ruleA = t.FromTo("a", "A")
ruleA.Minimum = 3
Console.WriteLine("--- Case 1: Fails (only 2 'a's) ---")
t.Transform("a b a b c")
Console.WriteLine($"Result: {t}")
Console.WriteLine($"Matches Found: {t.Matches.Count()}")
Console.WriteLine("")
Console.WriteLine("--- Case 2: Succeeds (3 'a's) ---")
t.Transform("a b a b a c")
Console.WriteLine($"Result: {t}")
Console.WriteLine($"Matches Found: {t.Matches.Count()}")
End Sub
End Module
--- Case 1: Fails (only 2 'a's) ---
Result: a b a b c
Matches Found: 0
--- Case 2: Succeeds (3 'a's) ---
Result: A b A b A c
Matches Found: 3 Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim t = uc.NewTransformer() Dim ruleA = t.FromTo("a", "A") ruleA.Minimum = 3 Console.WriteLine("--- Case 1: Fails (only 2 'a's) ---") t.Transform("a b a b c") Console.WriteLine($"Result: {t}") Console.WriteLine($"Matches Found: {t.Matches.Count()}") Console.WriteLine("") Console.WriteLine("--- Case 2: Succeeds (3 'a's) ---") t.Transform("a b a b a c") Console.WriteLine($"Result: {t}") Console.WriteLine($"Matches Found: {t.Matches.Count()}") End Sub End Module
A practical example where a 'data' rule is invalidated if it appears too few times, while a 'header' rule is unaffected.
using uCalcSoftware;
var uc = new uCalc();
var t = uc.NewTransformer();
var document = """
Header: Section 1
Data: A
Data: B
Header: Section 2
Data: C
""";
t.Text = document;
var dataRule = t.Pattern("Data: {val}");
var headerRule = t.Pattern("Header: {val}");
dataRule.Minimum = 2;
Console.WriteLine("--- Find with Minimum(2) ---");
t.Find();
Console.WriteLine($"Total Matches: {t.Matches.Count()}");
Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}");
Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}");
dataRule.Minimum = 4;
Console.WriteLine("");
Console.WriteLine("--- Find with Minimum(4) ---");
t.Find();
Console.WriteLine($"Total Matches: {t.Matches.Count()}");
Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}");
Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}");
--- Find with Minimum(2) ---
Total Matches: 5
Data Matches: 3
Header Matches: 2
--- Find with Minimum(4) ---
Total Matches: 2
Data Matches: 0
Header Matches: 2 using uCalcSoftware; var uc = new uCalc(); var t = uc.NewTransformer(); var document = """ Header: Section 1 Data: A Data: B Header: Section 2 Data: C """; t.Text = document; var dataRule = t.Pattern("Data: {val}"); var headerRule = t.Pattern("Header: {val}"); dataRule.Minimum = 2; Console.WriteLine("--- Find with Minimum(2) ---"); t.Find(); Console.WriteLine($"Total Matches: {t.Matches.Count()}"); Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}"); Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}"); dataRule.Minimum = 4; Console.WriteLine(""); Console.WriteLine("--- Find with Minimum(4) ---"); t.Find(); Console.WriteLine($"Total Matches: {t.Matches.Count()}"); Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}"); Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}");
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto t = uc.NewTransformer();
auto document = R"(
Header: Section 1
Data: A
Data: B
Header: Section 2
Data: C
)";
t.Text(document);
auto dataRule = t.Pattern("Data: {val}");
auto headerRule = t.Pattern("Header: {val}");
dataRule.Minimum(2);
cout << "--- Find with Minimum(2) ---" << endl;
t.Find();
cout << "Total Matches: " << t.Matches().Count() << endl;
cout << "Data Matches: " << dataRule.Matches().Count() << endl;
cout << "Header Matches: " << headerRule.Matches().Count() << endl;
dataRule.Minimum(4);
cout << "" << endl;
cout << "--- Find with Minimum(4) ---" << endl;
t.Find();
cout << "Total Matches: " << t.Matches().Count() << endl;
cout << "Data Matches: " << dataRule.Matches().Count() << endl;
cout << "Header Matches: " << headerRule.Matches().Count() << endl;
}
--- Find with Minimum(2) ---
Total Matches: 5
Data Matches: 3
Header Matches: 2
--- Find with Minimum(4) ---
Total Matches: 2
Data Matches: 0
Header Matches: 2 #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto t = uc.NewTransformer(); auto document = R"( Header: Section 1 Data: A Data: B Header: Section 2 Data: C )"; t.Text(document); auto dataRule = t.Pattern("Data: {val}"); auto headerRule = t.Pattern("Header: {val}"); dataRule.Minimum(2); cout << "--- Find with Minimum(2) ---" << endl; t.Find(); cout << "Total Matches: " << t.Matches().Count() << endl; cout << "Data Matches: " << dataRule.Matches().Count() << endl; cout << "Header Matches: " << headerRule.Matches().Count() << endl; dataRule.Minimum(4); cout << "" << endl; cout << "--- Find with Minimum(4) ---" << endl; t.Find(); cout << "Total Matches: " << t.Matches().Count() << endl; cout << "Data Matches: " << dataRule.Matches().Count() << endl; cout << "Header Matches: " << headerRule.Matches().Count() << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim t = uc.NewTransformer()
Dim document = "
Header: Section 1
Data: A
Data: B
Header: Section 2
Data: C
"
t.Text = document
Dim dataRule = t.Pattern("Data: {val}")
Dim headerRule = t.Pattern("Header: {val}")
dataRule.Minimum = 2
Console.WriteLine("--- Find with Minimum(2) ---")
t.Find()
Console.WriteLine($"Total Matches: {t.Matches.Count()}")
Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}")
Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}")
dataRule.Minimum = 4
Console.WriteLine("")
Console.WriteLine("--- Find with Minimum(4) ---")
t.Find()
Console.WriteLine($"Total Matches: {t.Matches.Count()}")
Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}")
Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}")
End Sub
End Module
--- Find with Minimum(2) ---
Total Matches: 5
Data Matches: 3
Header Matches: 2
--- Find with Minimum(4) ---
Total Matches: 2
Data Matches: 0
Header Matches: 2 Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim t = uc.NewTransformer() Dim document = " Header: Section 1 Data: A Data: B Header: Section 2 Data: C " t.Text = document Dim dataRule = t.Pattern("Data: {val}") Dim headerRule = t.Pattern("Header: {val}") dataRule.Minimum = 2 Console.WriteLine("--- Find with Minimum(2) ---") t.Find() Console.WriteLine($"Total Matches: {t.Matches.Count()}") Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}") Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}") dataRule.Minimum = 4 Console.WriteLine("") Console.WriteLine("--- Find with Minimum(4) ---") t.Find() Console.WriteLine($"Total Matches: {t.Matches.Count()}") Console.WriteLine($"Data Matches: {dataRule.Matches.Count()}") Console.WriteLine($"Header Matches: {headerRule.Matches.Count()}") End Sub End Module
Internal Test: Clearly contrasts the rule-level invalidation of `Minimum` with the transformer-level invalidation of `GlobalMinimum`.
using uCalcSoftware;
var uc = new uCalc();
var FruitsXML =
"""
""";
var t = new uCalc.Transformer();
t.Text = FruitsXML;
var fruitsTagRule = t.Pattern("");
var fruitRule = t.Pattern("CommonName={@string:name}");
Console.WriteLine("--- Using Minimum (Rule-Level Invalidation) ---");
fruitRule.Minimum = 4; // Rule fails if fewer than 4 fruits are found.
t.Find();
Console.WriteLine($"Match count when fruit rule fails: {t.Matches.Count()}");
Console.WriteLine("Matches found:");
foreach(var m in t.Matches) {
Console.WriteLine($" {m.Text}");
};
Console.WriteLine("");
Console.WriteLine("--- Using GlobalMinimum (Transformer-Level Invalidation) ---");
fruitRule.Minimum = 0; // Reset local minimum
fruitRule.GlobalMinimum = 4; // Transformer fails if fewer than 4 fruits are found.
t.Find();
Console.WriteLine($"Match count when global rule fails: {t.Matches.Count()}");
Console.WriteLine("Matches found:");
foreach(var m in t.Matches) {
Console.WriteLine($" {m.Text}");
};
--- Using Minimum (Rule-Level Invalidation) ---
Match count when fruit rule fails: 1
Matches found:
<Fruits>
--- Using GlobalMinimum (Transformer-Level Invalidation) ---
Match count when global rule fails: 0
Matches found: using uCalcSoftware; var uc = new uCalc(); var FruitsXML = """ <Fruits> <Fruit CommonName='Apple' /> <Fruit CommonName='Banana' /> <Fruit CommonName='Orange' /> </Fruits> """; var t = new uCalc.Transformer(); t.Text = FruitsXML; var fruitsTagRule = t.Pattern("<Fruits>"); var fruitRule = t.Pattern("CommonName={@string:name}"); Console.WriteLine("--- Using Minimum (Rule-Level Invalidation) ---"); fruitRule.Minimum = 4; // Rule fails if fewer than 4 fruits are found. t.Find(); Console.WriteLine($"Match count when fruit rule fails: {t.Matches.Count()}"); Console.WriteLine("Matches found:"); foreach(var m in t.Matches) { Console.WriteLine($" {m.Text}"); }; Console.WriteLine(""); Console.WriteLine("--- Using GlobalMinimum (Transformer-Level Invalidation) ---"); fruitRule.Minimum = 0; // Reset local minimum fruitRule.GlobalMinimum = 4; // Transformer fails if fewer than 4 fruits are found. t.Find(); Console.WriteLine($"Match count when global rule fails: {t.Matches.Count()}"); Console.WriteLine("Matches found:"); foreach(var m in t.Matches) { Console.WriteLine($" {m.Text}"); };
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto FruitsXML =
R"(
)";
uCalc::Transformer t;
t.Text(FruitsXML);
auto fruitsTagRule = t.Pattern("");
auto fruitRule = t.Pattern("CommonName={@string:name}");
cout << "--- Using Minimum (Rule-Level Invalidation) ---" << endl;
fruitRule.Minimum(4); // Rule fails if fewer than 4 fruits are found.
t.Find();
cout << "Match count when fruit rule fails: " << t.Matches().Count() << endl;
cout << "Matches found:" << endl;
for(auto m : t.Matches()) {
cout << " " << m.Text() << endl;
};
cout << "" << endl;
cout << "--- Using GlobalMinimum (Transformer-Level Invalidation) ---" << endl;
fruitRule.Minimum(0); // Reset local minimum
fruitRule.GlobalMinimum(4); // Transformer fails if fewer than 4 fruits are found.
t.Find();
cout << "Match count when global rule fails: " << t.Matches().Count() << endl;
cout << "Matches found:" << endl;
for(auto m : t.Matches()) {
cout << " " << m.Text() << endl;
};
}
--- Using Minimum (Rule-Level Invalidation) ---
Match count when fruit rule fails: 1
Matches found:
<Fruits>
--- Using GlobalMinimum (Transformer-Level Invalidation) ---
Match count when global rule fails: 0
Matches found: #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto FruitsXML = R"( <Fruits> <Fruit CommonName='Apple' /> <Fruit CommonName='Banana' /> <Fruit CommonName='Orange' /> </Fruits> )"; uCalc::Transformer t; t.Text(FruitsXML); auto fruitsTagRule = t.Pattern("<Fruits>"); auto fruitRule = t.Pattern("CommonName={@string:name}"); cout << "--- Using Minimum (Rule-Level Invalidation) ---" << endl; fruitRule.Minimum(4); // Rule fails if fewer than 4 fruits are found. t.Find(); cout << "Match count when fruit rule fails: " << t.Matches().Count() << endl; cout << "Matches found:" << endl; for(auto m : t.Matches()) { cout << " " << m.Text() << endl; }; cout << "" << endl; cout << "--- Using GlobalMinimum (Transformer-Level Invalidation) ---" << endl; fruitRule.Minimum(0); // Reset local minimum fruitRule.GlobalMinimum(4); // Transformer fails if fewer than 4 fruits are found. t.Find(); cout << "Match count when global rule fails: " << t.Matches().Count() << endl; cout << "Matches found:" << endl; for(auto m : t.Matches()) { cout << " " << m.Text() << endl; }; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim FruitsXML =
"
"
Dim t As New uCalc.Transformer()
t.Text = FruitsXML
Dim fruitsTagRule = t.Pattern("")
Dim fruitRule = t.Pattern("CommonName={@string:name}")
Console.WriteLine("--- Using Minimum (Rule-Level Invalidation) ---")
fruitRule.Minimum = 4 '// Rule fails if fewer than 4 fruits are found.
t.Find()
Console.WriteLine($"Match count when fruit rule fails: {t.Matches.Count()}")
Console.WriteLine("Matches found:")
For Each m In t.Matches
Console.WriteLine($" {m.Text}")
Next
Console.WriteLine("")
Console.WriteLine("--- Using GlobalMinimum (Transformer-Level Invalidation) ---")
fruitRule.Minimum = 0 '// Reset local minimum
fruitRule.GlobalMinimum = 4 '// Transformer fails if fewer than 4 fruits are found.
t.Find()
Console.WriteLine($"Match count when global rule fails: {t.Matches.Count()}")
Console.WriteLine("Matches found:")
For Each m In t.Matches
Console.WriteLine($" {m.Text}")
Next
End Sub
End Module
--- Using Minimum (Rule-Level Invalidation) ---
Match count when fruit rule fails: 1
Matches found:
<Fruits>
--- Using GlobalMinimum (Transformer-Level Invalidation) ---
Match count when global rule fails: 0
Matches found: Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim FruitsXML = " <Fruits> <Fruit CommonName='Apple' /> <Fruit CommonName='Banana' /> <Fruit CommonName='Orange' /> </Fruits> " Dim t As New uCalc.Transformer() t.Text = FruitsXML Dim fruitsTagRule = t.Pattern("<Fruits>") Dim fruitRule = t.Pattern("CommonName={@string:name}") Console.WriteLine("--- Using Minimum (Rule-Level Invalidation) ---") fruitRule.Minimum = 4 '// Rule fails if fewer than 4 fruits are found. t.Find() Console.WriteLine($"Match count when fruit rule fails: {t.Matches.Count()}") Console.WriteLine("Matches found:") For Each m In t.Matches Console.WriteLine($" {m.Text}") Next Console.WriteLine("") Console.WriteLine("--- Using GlobalMinimum (Transformer-Level Invalidation) ---") fruitRule.Minimum = 0 '// Reset local minimum fruitRule.GlobalMinimum = 4 '// Transformer fails if fewer than 4 fruits are found. t.Find() Console.WriteLine($"Match count when global rule fails: {t.Matches.Count()}") Console.WriteLine("Matches found:") For Each m In t.Matches Console.WriteLine($" {m.Text}") Next End Sub End Module
Minimum, GlobalMinimum
using uCalcSoftware;
var uc = new uCalc();
var FruitsXML =
"""
""";
uc.DefineVariable("x = 1");
var t = uc.NewTransformer();
var FruitsTag = t.FromTo("", "List of fruits");
var Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}");
Fruit.Minimum = 20;
t.Filter(FruitsXML);
Console.WriteLine($"Minimum = {Fruit.Minimum}");
Console.WriteLine($"Matches count: {t.Matches.Count()}"); // 1 for FruitsTag occurrence
Console.WriteLine("");
Console.WriteLine(t.Matches);
Console.WriteLine("");
Console.WriteLine("===============");
uc.Eval("x = 1");
Fruit.Minimum = 10;
t.Filter(FruitsXML);
Console.WriteLine($"Minimum = {Fruit.Minimum}");
Console.WriteLine($"Matches count: {t.Matches.Count()}"); // 1 for FruitsTag plus 12 fruits
Console.WriteLine("");
Console.WriteLine(t.Matches);
Console.WriteLine("");
Console.WriteLine("===============");
uc.Eval("x = 1");
Fruit.GlobalMinimum = 20; // Notice "List of fruits" will not show
t.Filter(FruitsXML);
Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}");
Console.WriteLine($"Matches count: {t.Matches.Count()}"); // Even FruitsTage won't be counted
Console.WriteLine("");
Console.WriteLine(t.Matches);
Console.WriteLine("===============");
uc.Eval("x = 1");
Fruit.GlobalMinimum = 10;
t.Filter(FruitsXML);
Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}");
Console.WriteLine($"Matches count: {t.Matches.Count()}");
Console.WriteLine("");
Console.WriteLine(t.Matches);
Minimum = 20
Matches count: 1
List of fruits
===============
Minimum = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon
===============
MinimumAND = 20
Matches count: 0
===============
MinimumAND = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon using uCalcSoftware; var uc = new uCalc(); var FruitsXML = """ <Fruits> <Fruit CommonName='Apple' ScientificName='Malus domestica' /> <Fruit CommonName='Banana' ScientificName='Musa acuminata' /> <Fruit CommonName='Orange' ScientificName='Citrus × sinensis' /> <Fruit CommonName='Grapes' ScientificName='Vitis vinifera' /> <Fruit CommonName='Strawberry' ScientificName='Fragaria × ananassa' /> <Fruit CommonName='Pineapple' ScientificName='Ananas comosus' /> <Fruit CommonName='Mango' ScientificName='Mangifera indica' /> <Fruit CommonName='Blueberry' ScientificName='Vaccinium corymbosum' /> <Fruit CommonName='Rambutan' ScientificName='Nephelium lappaceum' /> <Fruit CommonName='Salak (Snake Fruit)' ScientificName='Salacca zalacca' /> <Fruit CommonName='Jabuticaba' ScientificName='Plinia cauliflora' /> <Fruit CommonName='Watermelon' ScientificName='Citrullus lanatus' /> </Fruits> """; uc.DefineVariable("x = 1"); var t = uc.NewTransformer(); var FruitsTag = t.FromTo("<Fruits>", "List of fruits"); var Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}"); Fruit.Minimum = 20; t.Filter(FruitsXML); Console.WriteLine($"Minimum = {Fruit.Minimum}"); Console.WriteLine($"Matches count: {t.Matches.Count()}"); // 1 for FruitsTag occurrence Console.WriteLine(""); Console.WriteLine(t.Matches); Console.WriteLine(""); Console.WriteLine("==============="); uc.Eval("x = 1"); Fruit.Minimum = 10; t.Filter(FruitsXML); Console.WriteLine($"Minimum = {Fruit.Minimum}"); Console.WriteLine($"Matches count: {t.Matches.Count()}"); // 1 for FruitsTag plus 12 fruits Console.WriteLine(""); Console.WriteLine(t.Matches); Console.WriteLine(""); Console.WriteLine("==============="); uc.Eval("x = 1"); Fruit.GlobalMinimum = 20; // Notice "List of fruits" will not show t.Filter(FruitsXML); Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}"); Console.WriteLine($"Matches count: {t.Matches.Count()}"); // Even FruitsTage won't be counted Console.WriteLine(""); Console.WriteLine(t.Matches); Console.WriteLine("==============="); uc.Eval("x = 1"); Fruit.GlobalMinimum = 10; t.Filter(FruitsXML); Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}"); Console.WriteLine($"Matches count: {t.Matches.Count()}"); Console.WriteLine(""); Console.WriteLine(t.Matches);
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto FruitsXML =
R"(
)";
uc.DefineVariable("x = 1");
auto t = uc.NewTransformer();
auto FruitsTag = t.FromTo("", "List of fruits");
auto Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}");
Fruit.Minimum(20);
t.Filter(FruitsXML);
cout << "Minimum = " << Fruit.Minimum() << endl;
cout << "Matches count: " << t.Matches().Count() << endl; // 1 for FruitsTag occurrence
cout << "" << endl;
cout << t.Matches() << endl;
cout << "" << endl;
cout << "===============" << endl;
uc.Eval("x = 1");
Fruit.Minimum(10);
t.Filter(FruitsXML);
cout << "Minimum = " << Fruit.Minimum() << endl;
cout << "Matches count: " << t.Matches().Count() << endl; // 1 for FruitsTag plus 12 fruits
cout << "" << endl;
cout << t.Matches() << endl;
cout << "" << endl;
cout << "===============" << endl;
uc.Eval("x = 1");
Fruit.GlobalMinimum(20); // Notice "List of fruits" will not show
t.Filter(FruitsXML);
cout << "MinimumAND = " << Fruit.GlobalMinimum() << endl;
cout << "Matches count: " << t.Matches().Count() << endl; // Even FruitsTage won't be counted
cout << "" << endl;
cout << t.Matches() << endl;
cout << "===============" << endl;
uc.Eval("x = 1");
Fruit.GlobalMinimum(10);
t.Filter(FruitsXML);
cout << "MinimumAND = " << Fruit.GlobalMinimum() << endl;
cout << "Matches count: " << t.Matches().Count() << endl;
cout << "" << endl;
cout << t.Matches() << endl;
}
Minimum = 20
Matches count: 1
List of fruits
===============
Minimum = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon
===============
MinimumAND = 20
Matches count: 0
===============
MinimumAND = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto FruitsXML = R"( <Fruits> <Fruit CommonName='Apple' ScientificName='Malus domestica' /> <Fruit CommonName='Banana' ScientificName='Musa acuminata' /> <Fruit CommonName='Orange' ScientificName='Citrus × sinensis' /> <Fruit CommonName='Grapes' ScientificName='Vitis vinifera' /> <Fruit CommonName='Strawberry' ScientificName='Fragaria × ananassa' /> <Fruit CommonName='Pineapple' ScientificName='Ananas comosus' /> <Fruit CommonName='Mango' ScientificName='Mangifera indica' /> <Fruit CommonName='Blueberry' ScientificName='Vaccinium corymbosum' /> <Fruit CommonName='Rambutan' ScientificName='Nephelium lappaceum' /> <Fruit CommonName='Salak (Snake Fruit)' ScientificName='Salacca zalacca' /> <Fruit CommonName='Jabuticaba' ScientificName='Plinia cauliflora' /> <Fruit CommonName='Watermelon' ScientificName='Citrullus lanatus' /> </Fruits> )"; uc.DefineVariable("x = 1"); auto t = uc.NewTransformer(); auto FruitsTag = t.FromTo("<Fruits>", "List of fruits"); auto Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}"); Fruit.Minimum(20); t.Filter(FruitsXML); cout << "Minimum = " << Fruit.Minimum() << endl; cout << "Matches count: " << t.Matches().Count() << endl; // 1 for FruitsTag occurrence cout << "" << endl; cout << t.Matches() << endl; cout << "" << endl; cout << "===============" << endl; uc.Eval("x = 1"); Fruit.Minimum(10); t.Filter(FruitsXML); cout << "Minimum = " << Fruit.Minimum() << endl; cout << "Matches count: " << t.Matches().Count() << endl; // 1 for FruitsTag plus 12 fruits cout << "" << endl; cout << t.Matches() << endl; cout << "" << endl; cout << "===============" << endl; uc.Eval("x = 1"); Fruit.GlobalMinimum(20); // Notice "List of fruits" will not show t.Filter(FruitsXML); cout << "MinimumAND = " << Fruit.GlobalMinimum() << endl; cout << "Matches count: " << t.Matches().Count() << endl; // Even FruitsTage won't be counted cout << "" << endl; cout << t.Matches() << endl; cout << "===============" << endl; uc.Eval("x = 1"); Fruit.GlobalMinimum(10); t.Filter(FruitsXML); cout << "MinimumAND = " << Fruit.GlobalMinimum() << endl; cout << "Matches count: " << t.Matches().Count() << endl; cout << "" << endl; cout << t.Matches() << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim FruitsXML =
"
"
uc.DefineVariable("x = 1")
Dim t = uc.NewTransformer()
Dim FruitsTag = t.FromTo("", "List of fruits")
Dim Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}")
Fruit.Minimum = 20
t.Filter(FruitsXML)
Console.WriteLine($"Minimum = {Fruit.Minimum}")
Console.WriteLine($"Matches count: {t.Matches.Count()}") '// 1 for FruitsTag occurrence
Console.WriteLine("")
Console.WriteLine(t.Matches)
Console.WriteLine("")
Console.WriteLine("===============")
uc.Eval("x = 1")
Fruit.Minimum = 10
t.Filter(FruitsXML)
Console.WriteLine($"Minimum = {Fruit.Minimum}")
Console.WriteLine($"Matches count: {t.Matches.Count()}") '// 1 for FruitsTag plus 12 fruits
Console.WriteLine("")
Console.WriteLine(t.Matches)
Console.WriteLine("")
Console.WriteLine("===============")
uc.Eval("x = 1")
Fruit.GlobalMinimum = 20 '// Notice "List of fruits" will not show
t.Filter(FruitsXML)
Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}")
Console.WriteLine($"Matches count: {t.Matches.Count()}") '// Even FruitsTage won't be counted
Console.WriteLine("")
Console.WriteLine(t.Matches)
Console.WriteLine("===============")
uc.Eval("x = 1")
Fruit.GlobalMinimum = 10
t.Filter(FruitsXML)
Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}")
Console.WriteLine($"Matches count: {t.Matches.Count()}")
Console.WriteLine("")
Console.WriteLine(t.Matches)
End Sub
End Module
Minimum = 20
Matches count: 1
List of fruits
===============
Minimum = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon
===============
MinimumAND = 20
Matches count: 0
===============
MinimumAND = 10
Matches count: 13
List of fruits
1. Apple
2. Banana
3. Orange
4. Grapes
5. Strawberry
6. Pineapple
7. Mango
8. Blueberry
9. Rambutan
10. Salak (Snake Fruit)
11. Jabuticaba
12. Watermelon Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim FruitsXML = " <Fruits> <Fruit CommonName='Apple' ScientificName='Malus domestica' /> <Fruit CommonName='Banana' ScientificName='Musa acuminata' /> <Fruit CommonName='Orange' ScientificName='Citrus × sinensis' /> <Fruit CommonName='Grapes' ScientificName='Vitis vinifera' /> <Fruit CommonName='Strawberry' ScientificName='Fragaria × ananassa' /> <Fruit CommonName='Pineapple' ScientificName='Ananas comosus' /> <Fruit CommonName='Mango' ScientificName='Mangifera indica' /> <Fruit CommonName='Blueberry' ScientificName='Vaccinium corymbosum' /> <Fruit CommonName='Rambutan' ScientificName='Nephelium lappaceum' /> <Fruit CommonName='Salak (Snake Fruit)' ScientificName='Salacca zalacca' /> <Fruit CommonName='Jabuticaba' ScientificName='Plinia cauliflora' /> <Fruit CommonName='Watermelon' ScientificName='Citrullus lanatus' /> </Fruits> " uc.DefineVariable("x = 1") Dim t = uc.NewTransformer() Dim FruitsTag = t.FromTo("<Fruits>", "List of fruits") Dim Fruit = t.FromTo("CommonName={@string:name}", "{@Eval: x++}. {name}") Fruit.Minimum = 20 t.Filter(FruitsXML) Console.WriteLine($"Minimum = {Fruit.Minimum}") Console.WriteLine($"Matches count: {t.Matches.Count()}") '// 1 for FruitsTag occurrence Console.WriteLine("") Console.WriteLine(t.Matches) Console.WriteLine("") Console.WriteLine("===============") uc.Eval("x = 1") Fruit.Minimum = 10 t.Filter(FruitsXML) Console.WriteLine($"Minimum = {Fruit.Minimum}") Console.WriteLine($"Matches count: {t.Matches.Count()}") '// 1 for FruitsTag plus 12 fruits Console.WriteLine("") Console.WriteLine(t.Matches) Console.WriteLine("") Console.WriteLine("===============") uc.Eval("x = 1") Fruit.GlobalMinimum = 20 '// Notice "List of fruits" will not show t.Filter(FruitsXML) Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}") Console.WriteLine($"Matches count: {t.Matches.Count()}") '// Even FruitsTage won't be counted Console.WriteLine("") Console.WriteLine(t.Matches) Console.WriteLine("===============") uc.Eval("x = 1") Fruit.GlobalMinimum = 10 t.Filter(FruitsXML) Console.WriteLine($"MinimumAND = {Fruit.GlobalMinimum}") Console.WriteLine($"Matches count: {t.Matches.Count()}") Console.WriteLine("") Console.WriteLine(t.Matches) End Sub End Module