file parsing with a condition, display on screen
My code is currently building with no errors. It is searching in an xml file for values, and I need for it to check if the values are within a range that determines if they pass/fail. I believe I have the code right but I need the pass/fail to display on the screen. Any help?
var query = from file in fileEntries
let doc = XDocument.Load(file)
let x = doc.Descendants("XAxisCalib").Single()
let y = doc.Descendants("YAxisCalib").Single()
let z = doc.Descendants("ZAxisCalib").Single()
select new
{
XMax = x.Element("Max").Value,
XMin = x.Element("Min").Value,
YMax = y.Element("Max").Value,
YMin = y.Element("Min").Value,
ZMax = z.Element("Max").Value,
ZMin = z.Element("Min").Value
};
var results = from item in query
select new
{
XMaxResult = Convert.ToInt32(item.XMax) < 290 ? "pass" : "fail",
XMinResult = Convert.ToInt32(item.XMin) > -50 ? "pass" : "fail",
YMaxResult = Convert.ToInt32(item.YMax) < 645 ? "pass" : "fail",
YMinResult = Convert.ToInt32(item.YMin) > -87 ? "pass" : "fail",
ZMaxResult = Convert.ToInt32(item.ZMax) < 20 ? "pass" : "fail",
ZMinResult = Convert.ToInt32(item.ZMin) > -130 ? "pass" : "fail"开发者_如何学Python,
};
Sample Xml: (more lines but deleted for simplicity)
<XAxisCalib>
<Max>296</Max>
<Min>-51.04</Min>
</XAxisCalib>
<YAxisCalib>
<Max>640</Max>
<Min>-24.6</Min>
</YAxisCalib>
<ZAxisCalib>
<Max>29.67</Max>
<Min>-129</Min>
It's a little unclear to me what you're asking, but can you do something like this?
foreach (var result in results)
{
Console.WriteLine("XMaxResult = {0}", result.XMaxResult );
Console.WriteLine("XMinResult = {0}", result.XMinResult );
Console.WriteLine("YMaxResult = {0}", result.YMaxResult );
Console.WriteLine("YMinResult = {0}", result.YMinResult );
Console.WriteLine("ZMaxResult = {0}", result.ZMaxResult );
Console.WriteLine("ZMinResult = {0}", result.ZMinResult );
}
Update: if the problem is that you can't parse the values to integer, you will need to add some error handling. Your requirements might be different, but as an example you can try a simple method like this:
private static double TryParseWithDefault(string input, double defaultValue)
{
double result;
if (!double.TryParse(input, out result))
return defaultValue;
return result;
}
Which will at least not crash if the input is non-numeric. Then instead of
Convert.ToInt32(item.XMax)
try using
TryParseWithDefault(item.XMax, double.NaN)
精彩评论