Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access VBA是搜索40mb xml文件或将该文件的二进制数组转换为字符串以进行搜索的最快方法_Ms Access_Vba - Fatal编程技术网

Ms access VBA是搜索40mb xml文件或将该文件的二进制数组转换为字符串以进行搜索的最快方法

Ms access VBA是搜索40mb xml文件或将该文件的二进制数组转换为字符串以进行搜索的最快方法,ms-access,vba,Ms Access,Vba,你好, 我在MS Access后面运行VBA。我需要重复搜索和检索40mb文件中的数据。它太大,无法加载到字符串变量中。我已经将它加载到二进制数组中(我可能会很快地添加),但我不知道如何利用这种格式……我似乎无法掌握在数组中一次循环一个字节来搜索字符串。。。。。。 所以我放弃了这个想法…(但我愿意学习如何利用这个策略)…我开始基于FilesystemObject的搜索;以下是我目前掌握的情况: 我得到节点的beggining(x)和end(y)&然后将其放入FLat变量中 Set ts = F

你好, 我在MS Access后面运行VBA。我需要重复搜索和检索40mb文件中的数据。它太大,无法加载到字符串变量中。我已经将它加载到二进制数组中(我可能会很快地添加),但我不知道如何利用这种格式……我似乎无法掌握在数组中一次循环一个字节来搜索字符串。。。。。。 所以我放弃了这个想法…(但我愿意学习如何利用这个策略)…我开始基于FilesystemObject的搜索;以下是我目前掌握的情况:

我得到节点的beggining(x)和end(y)&然后将其放入FLat变量中

 Set ts = FSO.OpenTextFile(DLookup("gsgtver", "Eramdat", "EramID = 1"), ForReading, False, TristateFalse)
 x = InStr(1, ts.ReadAll, ">" & sFirst & "<")

 ts.Close

 Set ts = FSO.OpenTextFile(DLookup("gsgtver", "Eramdat", "EramID = 1"), ForReading, False, TristateFalse)
 y = InStr(x, ts.ReadAll, "</FixRecord")

 ts.Close

 Set ts = FSO.OpenTextFile(DLookup("gsgtver", "Eramdat", "EramID = 1"), ForReading, False, TristateFalse)
 FLat = Mid(ts.ReadAll, x, y - x)

 ts.Close
设置ts=FSO.OpenTextFile(DLookup(“gsgtver”、“Eramdat”、“EramID=1”),用于读取、假、三态假)

x=InStr(1,ts.ReadAll,“>”&sFirst&“以下方法如何:

  • 循环遍历40mb xml文件中的每个元素
  • 将元素赋值给字符串变量
  • 将字符串变量添加到
    集合
    对象

  • 最后是一组表示XML的字符串。然后,当需要搜索它时,只需通过字符串集合对每个字符串执行
    ,然后一次对一个元素进行比较。

    我知道您在寻找流畅性,因此我建议将XML文件加载到XML文档对象中。为什么要处理XML信息n作为一个字符串“汤”,当它实际上整齐地组织在一个易于搜索的层次结构中时

    Dim xmlDoc As Object
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
    xmlDoc.async = False ' Don't ask.
    xmlDoc.Load "C:\myfile.xml" 
    'Voilà, your XML is loaded and parsed, ready to be searched.
    
    请参阅文档表单XML文档

    然后,您可以使用XPath表示法(教程)随机访问XML文档中的数据,例如:

    引号中的内容是XPath。我相信您可以使用单个XPath语句检索您要查找的内容。如果您告诉XML对象您要查找的内容,它将为您进行搜索。这就是它的用途


    这确实是访问XML格式信息的正确方法。任何其他方法,与之相比,你真的只是让你自己的生活更悲惨。

    谢谢你的帮助。下一个家伙有一个非常漂亮的答案,我想我会同意……但我对什么是“节点”很好奇“是……不过,我同意你的看法。如果你能使用XML库来实现你的目标,那几乎肯定是你最好的选择。看起来很漂亮……我同意利用XML的特性,是的,在目前的等待状态下,我的生活很悲惨;)所以…我找不到一个好的库引用来给自己调暗一个好的IXMLDOMNode,这样我就可以使用“someElement”。当我尝试在someElement.text中达到峰值时,出现“Object Varialbe not set”错误。可能是我使用了错误的节点符号;下面是我得到的:Set someElement=xmlDoc.SelectSingleNode(“/FixRecord/FixID[1]”)我正在使用
    MicrosoftXML,v6.0
    它已经存在于我的系统(Vista/Office2007)中。我在我的参考库中选择了它……它已被选中。当我调暗someElement变量时,我得到了一个IXMLDOMNode选择,我甚至在我的点(和许多其他点)之后得到了“text”方法,但错误总是突然出现。。。。。我打赌引号里的东西有点夸张了…我将在XPath语法上再上一个高峰。这些东西一开始就有点棘手。必须正确使用XPath。为什么不提出一个新问题,向我们展示input.xml文件的一部分,这样人们就可以提供帮助了。评论太多了。您的xmlDoc创建是否正确?让我们知道调试细节。
    Set someElement = _
        xmlDoc.selectSingleNode("//MyElementName[@MyAttributeName = 'blabla']")
    theStringINeed = someElement.Text