代码之家  ›  专栏  ›  技术社区  ›  Denis Palnitsky

价格表分析器

  •  3
  • Denis Palnitsky  · 技术社区  · 14 年前

    我必须创建价格表解析器,从excel或csv导入数据并将其放入数据库。从数据源获取数据没有问题。。

    你有什么建议,有没有常用的方法或库?

    Data sample 1:

    Intel Core 2 Duo E6300 (2.80GHz, 1066MHz, 2MB, S775) tray  |    83
    Intel Core 2 Duo E6500 (2.93GHz, 1066MHz, 2MB, S775) tray  |    86
    

    数据示例2:

         Title                     Description                Guaranty     Price  
    Intel Core 2 Duo E6300  |  2.80GHz, 1066MHz, 2MB, S775   |  12       |  83    
    Intel Core 2 Duo E6500  |  2.93GHz, 1066MHz, 2MB, S775   |  6        |  86
    

    数据示例3:

     UPC                Title                      Price
     456546545     |  Intel Core 2 Duo E6300    |  83 
     4654654654    |  Intel Core 2 Duo E6500    |  out of stock
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Shaun Bowe    14 年前

    我最近写了一个地址解析器,我使用的一般策略是首先提取出所有具有可区分模式的项。在我的例子中,我首先发现了邮政编码,它类似于你的例子中的价格。从那里我找到了州代码等。

    在你的例子中,我会找到价格并将其从行中删除。从那里你将需要在数据中找到一些模式,让你可以分析我们的产品代码。如果看不到更多的真实数据,就很难决定这是什么。。

    如果你能提供更多的数据,我们可能会更有帮助。

        2
  •  0
  •   Dave Markle    14 年前

        3
  •  0
  •   Geert Immerzeel    14 年前

    Depending on the quality of your input (are all input strings equally formatted), you could try the following:

    string s = "Intel Core 2 Duo E6300 (2.80GHz, 1066MHz, 2MB, S775) tray  |    83";
    string firstPart = s.Substring(0, s.IndexOf("(")).Trim(); //returns "Intel Core 2 Duo E6300"
    string secondPart = s.Substring(s.IndexOf("(") + 1, s.IndexOf(")") - s.IndexOf("(") - 1).Trim(); //returns "2.80GHz, 1066MHz, 2MB, S775"
    string thirdPart = s.Substring(s.IndexOf(")") + 1, s.IndexOf("|") - s.IndexOf(")") - 1).Trim(); //returns "tray"
    string fourthPart = s.Substring(s.IndexOf("|") + 1, s.Length - s.IndexOf("|") - 1).Trim(); //returns "83"
    

    但是,当数据的格式不统一时,在使用上述函数之前,可能需要进行一些(或大量)检查。