【问题标题】:file parsing with a condition, display on screen带条件的文件解析,显示在屏幕上
【发布时间】:2011-11-21 01:30:40
【问题描述】:

我的代码目前正在构建中,没有错误。它在 xml 文件中搜索值,我需要它检查这些值是否在确定它们是否通过/失败的范围内。我相信我的代码是正确的,但我需要通过/失败显示在屏幕上。有什么帮助吗?

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",

                          }; 

Sample Xml:(更多行但为简单起见已删除)

 <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>

【问题讨论】:

  • 这是一个控制台应用程序吗? Console.WriteLine 会将输出写入屏幕...
  • 是的控制台应用程序。但是我在哪里写它来显示每个条件的通过失败。我知道 console.writeline 把它写到屏幕上。

标签: c# xml linq-to-xml xml-parsing


【解决方案1】:

我有点不清楚你在问什么,但你能做这样的事情吗?

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 );
}

更新:如果问题是您无法将值解析为整数,则需要添加一些错误处理。您的要求可能有所不同,但作为示例,您可以尝试如下简单的方法:

    private static double TryParseWithDefault(string input, double defaultValue)
    {
        double result;
        if (!double.TryParse(input, out result))
            return defaultValue;
        return result;
    }

如果输入是非数字的,至少不会崩溃。然后代替

        Convert.ToInt32(item.XMax)

尝试使用

        TryParseWithDefault(item.XMax, double.NaN)

【讨论】:

  • 看起来不错。我想打印以筛选 xmax xmin 等的值是否通过或失败意味着它是否保持在代码中设置的范围内。
  • 上面的代码能做到你想要的吗?如果没有,你能解释一下你想看看它没有做吗?
  • 在我看来,上面的代码应该说明条件是通过还是失败。
  • @Casey,看起来您在解析 XML 值并将它们转换为整数时遇到了一些问题。有些值可能会以空的形式返回,或者可能是非数字的?如果是,那么您应该查看 Int32.TryParse() 如果可以解析字符串,它将返回 true/false。
  • 取决于您要执行的操作(您可以将默认的 double.NaN 更改为其他内容)但是是的,这就是我的建议。您可能需要将常量“290”更改为“290.0”或强制转换为 double。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多