prepare method
void
prepare()
extract the needed vars
Implementation
void prepare()
{
vars = {};//reset the variables
expressions = {};
for(int i = 0; i < cplus.length; i++)
{
JrlLine line = JrlLine(datum: datum[i]);
if(cminus[i].contains("-"))
{
var splitted = cminus[i].split("-");
//print("- range!! ${cminus[i]} $splitted");
line.addConstraint("kmin",boundaries: splitted);
}
else if(cplus[i].isEmpty) {}//do nothing
else line.kminus=book.kpl.get(cminus[i])!;
if(cplus[i].contains("-"))
{
var splitted = cplus[i].split("-");
//print("+ range!! ${cplus[i]} $splitted");
line.addConstraint("kplu",boundaries: splitted);
}
else if(cplus[i].isEmpty) {}//do nothing
else line.kplus=book.kpl.get(cplus[i])!;
if(line.kminus.number != "-1" && line.kminus.desc.isEmpty) print("Warning!! minus(${cminus[i]},${line.kminus.name},${line.kminus.number}) account probably erroneaous");
if(line.kplus.number != "-1" &&line.kplus.desc.isEmpty) print("Warning!! plus(${cplus[i]},${line.kplus.name},${line.kminus.number}) account probably erroneaous");
//print("set c+ to ${line.kplus} c- to ${line.kminus}");
if(desc[i].contains("#"))
{
//check if it can be evaluated with expressions: ^0.2.3:
//we need to extract the variables
RegExp rex = RegExp(r"#(\w+)");
//print("found matches for vars in desc: $rex");
rex.allMatches(desc[i]).forEach((match)
{
//vars[match.group(1)!] = match.group(1);
line.vars["desc"] ??= {};//initialise if needed
if(!vars.containsKey(match.group(1))) line.vars["desc"][match.group(1)!] = match.group(1); //add only if not allready present?
});
//print("extracted varaibles : $vars");
}
RegExp expPresent = RegExp(r'[()]+');
//print("checking for presence of $expPresent in ${desc[i]}");
if(desc[i].contains(expPresent)) parseExpression(line,desc[i], expPresent);
line.desc = desc[i];
//print("ops perparer valuta '${valuta[i]}'");
//valuta is either a vairable name or an expression can't be both....
if(valuta[i].contains(expPresent)) parseExpression(line,valuta[i], expPresent);
else if(valuta[i].contains("#"))
{
//we need to extract the variables
RegExp rex = RegExp(r"#(\w+)");
//print("matching ${rex.allMatches(valuta[i]).length}");
rex.allMatches(valuta[i]).forEach((match)
{
vars[match.group(1)!] = match.group(1);
line.valname = match.group(1);
});
line.valuta =-1;//force invalid value
}
else if(valuta[i].isNotEmpty) line.setValuta(valuta[i]);
if(mod[i].isNotEmpty) line.addConstraint("mode", mode:mod[i]);
//print("added $line");
preparedLines.add(line);
//data.add( [name, date, cplus[i], cminus[i], "${desc[i]}", cur[i], valuta[i], mod[i]]);
}
}