gpt4 book ai didi

数据库、关系查询

转载 作者:搜寻专家 更新时间:2023-10-30 21:43:48 25 4
gpt4 key购买 nike

化学品有一个商品名(这是它通常所说的)和一个实际的化学名称。我需要查找商品名称,找到其正确的化学名称,然后获取该化学品的特性。例如:

$tradeName = "Voranol"

if $tradeName == "Voranol" then
$productName = "Polyether Polyol"
$flare = "List I"
$bay = "1"
$listPos = 3
EndIf

我有一个包含大量产品的 .au3 文件。它工作正常,但是执行 if $tradeName == "Name1"or $tradeName == "Name2"or $tradeName == "Name4"or $tradeName == "Name5" 有点乏味。我还需要能够以编程方式对其进行编辑。这是我现在使用的:

if $product == "dowanol pmb" or $product == "dowanol pma" or $product == "dipropylene glycol" or $product == "dowanol pnp" or $productCheck2 == "dowanol pmb" or $productCheck2 == "dowanol pma" or $productCheck2 == "dipropylene glycol" or $productCheck2 == "dowanol pnp" then
$result = "DIPROPYLENE GLYCOL"
$bay = 4
$useFlare = 1
$listPos = 2

elseif $product == "glycol blend" then
$result = "GLYCOL"
$bay = 3
$useFlare = 2
$listPos = 1

elseif $product == "isopar e" or $product == "isopar c" or $product == "isopar h" or $productCheck2 == "isopar h" then
$result = "PETROLEUM NAPTHA"
$bay = 5
$useFlare = 0
$listPos = 1

EndIf
; Note: 0 = No Flare, 1 = Normal Flare, 2 = CAS Flare

最佳答案

数据库选项的另一种替代方法是使用 XML 文档来存储产品(化学)信息。

您可以使用 XPath 轻松查询 XML 以获取产品名称/属性。维护文件也相当容易。您甚至可以创建一个 XML 架构来进行验证,以确保您的文件在修改后仍然有效。

AutoIt 中 XML 的处理可以通过几种不同的方式完成:

  • 创建 MSXML对象
  • 运行命令行工具,如 xmlstarlet
  • 从命令行使用 XPath/XQuery/XSLT 处理器(即运行 java Saxon )

运行像 Saxon 这样的程序可能对您的需要来说有点矫枉过正。

MSXML 还不错,而且应该已经存在多个 UDF。

Xmlstarlet 将是我的投票。 (注意:我以前没有以这种方式使用过 xmlstarlet。我是 Saxon 的 super 粉丝,几乎只使用它。特别是对于 AutoIt,我结合使用了 MSXML 和 Saxon;Saxon 进行复杂的转换将数据放入一个更小、更简单的子集中,然后使用 MSXML 对该子集执行简单的 xpath 查询。但是,如果我打算做这样的事情,我会认真考虑 xmlstarlet。)

此外,如果您的数据增长到单个 XML 文件没有意义的程度,您始终可以将其拆分为一组较小的文件;个别产品也许。您可能还会达到将这些文件加载​​到实际 XML 数据库中可能有意义的程度(eXistdb 是一个选项)。

这是您的 XML(模式和实例)可能看起来像的一个简单示例:

XSD(产品.xsd)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="product"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="tradenames"/>
</xs:sequence>
<xs:attribute name="bay" use="required" type="xs:integer"/>
<xs:attribute name="listpos" use="required" type="xs:integer"/>
<xs:attribute name="useflare" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="tradenames">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
</xs:schema>

XML(产品.xml)

<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="products.xsd">
<product bay="4" useflare="1" listpos="2">
<name>DIPROPYLENE GLYCOL</name>
<tradenames>
<name>dowanol pmb</name>
<name>dowanol pma</name>
<name>dipropylene glycol</name>
<name>dowanol pnp</name>
</tradenames>
</product>
<product bay="3" useflare="2" listpos="1">
<name>GLYCOL</name>
<tradenames>
<name>glycol blend</name>
</tradenames>
</product>
<product bay="5" useflare="0" listpos="1">
<name>PETROLEUM NAPTHA</name>
<tradenames>
<name>isopar e</name>
<name>isopar c</name>
<name>isopar h</name>
</tradenames>
</product>
</products>

下面是一些 AutoIt,它使用 MSXML 来演示加载 XML(针对 XSD 进行验证)并搜索商品名称中包含“乙二醇”的产品。

AutoIt

;~  AutoIt Version: 3.3.14.2

;String to search on.
$searchString = "glycol"
ConsoleWrite("Search string: '" & $searchString & "'" & @CRLF)

;XPath for searching trade names. Search string is injected (code injection; escaping of strings would be a very good idea!).
$xpath_tradename = "/products/product[tradenames/name[contains(.,'" & $searchString & "')]]"
ConsoleWrite("XPath: '" & $xpath_tradename & "'" & @CRLF)

$msxml = ObjCreate('MSXML2.DOMDocument.6.0')
If IsObj($msxml) Then
$msxml.async = False
$msxml.validateOnParse = True
$msxml.resolveExternals = True
$msxml.setProperty("SelectionLanguage", "XPath")
$msxml.load('products.xml')
If $msxml.parseError.errorCode = 0 Then
$prods = $msxml.SelectNodes($xpath_tradename)
If IsObj($prods) And $prods.Length > 0 Then
ConsoleWrite("Number of products found: '" & $prods.Length & "'" & @CRLF)
For $prod In $prods
ConsoleWrite(@CRLF & "------ PRODUCT ------" & @CRLF)
ConsoleWrite("Product name: '" & $prod.SelectSingleNode('name').text & "'" & @CRLF)
ConsoleWrite("Product bay: '" & $prod.getAttribute('bay') & "'" & @CRLF)
Next
ConsoleWrite(@CRLF)
Else
ConsoleWrite("PRODUCT NOT FOUND" & @CRLF)
EndIf
Else
MsgBox(17, 'Error', 'Error opening XML file: ' & @CRLF & @CRLF & $msxml.parseError.reason)
SetError($msxml.parseError.errorCode)
EndIf
EndIf

控制台输出

Search string: 'glycol'
XPath: '/products/product[tradenames/name[contains(.,'glycol')]]'
Number of products found: '2'

------ PRODUCT ------
Product name: 'DIPROPYLENE GLYCOL'
Product bay: '4'

------ PRODUCT ------
Product name: 'GLYCOL'
Product bay: '3'

关于数据库、关系查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com