Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/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
通过php处理大型yaml文件_Php_Yaml - Fatal编程技术网

通过php处理大型yaml文件

通过php处理大型yaml文件,php,yaml,Php,Yaml,我需要处理一个巨大的yaml文件(450MB),以获取数据库中的数据。因此,我尝试使用“间谍”。但是文件太大了 每一章都有一行--!de.db.net,db::Util::M10lDocument。我需要每一章的内容作为一个数组。因此,我尝试使用spyc。但是完整的文件太大了。我不知道如何分割这些章节 是否可以逐块读取完整的文件 有人知道如何使用那个大文件吗?--是YAML流的首选。使用将文件作为流处理的YAML解析器应该允许您以文档大小的块处理文件,只要每个文档足够小,可以容纳在可用内存中 提

我需要处理一个巨大的yaml文件(450MB),以获取数据库中的数据。因此,我尝试使用“间谍”。但是文件太大了

每一章都有一行
--!de.db.net,db::Util::M10lDocument
。我需要每一章的内容作为一个数组。因此,我尝试使用spyc。但是完整的文件太大了。我不知道如何分割这些章节

是否可以逐块读取完整的文件

有人知道如何使用那个大文件吗?

--
是YAML流的首选。使用将文件作为流处理的YAML解析器应该允许您以文档大小的块处理文件,只要每个文档足够小,可以容纳在可用内存中

提供的功能包括从文档流中解析单个文档的能力。没有内置的方法来迭代文档(例如
foreach
support),但是您可以实现自己的循环,当
yaml\u parse\u file
返回
false
指示未找到请求的文档时,该循环会获取顺序文档并停止

<?php
$docNum = 0;
while (false !== ($doc = yaml_parse_file('example.yaml', $docNum))) {
    var_dump($doc);
    $docNum++;
}

如果没有内容示例,很难说。从理论上讲,YAML格式应该可以通过逐行进行分解并在某些事件(例如,新文档或新标量)时进行截断,从而使分解变得相当简单。如果章节足够小,您可以简单地使用FGET,直到找到新章节的开头,然后解析单个章节。是的,章节足够小,但我不知道如何像你描述的那样解析这一章。据我所知,spyc只读取一个文件,这个文件太大了。我对另一个解析器持开放态度。如果你能为你描述的解决方案写一个例子,我将非常感激。