Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Parsing 如何使用FParsec在F#中解析非常大的文件_Parsing_F#_Bigdata_Large Files_Fparsec - Fatal编程技术网

Parsing 如何使用FParsec在F#中解析非常大的文件

Parsing 如何使用FParsec在F#中解析非常大的文件,parsing,f#,bigdata,large-files,fparsec,Parsing,F#,Bigdata,Large Files,Fparsec,我正在尝试使用FParsec解析一个非常大的文件。文件大小为61GB,太大了,无法保存在RAM中,因此我想生成一系列结果(即,seq我想到的“明显的”事情是,使用类似于的东西预处理文件,然后一次解析一行 如果这不起作用(您的PDF看起来像一条记录只有几行长),那么您可以使用正常的文件流读取来创建一个记录序列或1000条记录或类似的内容。这不需要知道记录的详细信息,但如果您至少可以对记录进行定界,这会很方便 不管是哪种方式,最后都会得到一个惰性的seq,解析器可以读取。你能举一些记录为例吗?该文件

我正在尝试使用FParsec解析一个非常大的文件。文件大小为61GB,太大了,无法保存在RAM中,因此我想生成一系列结果(即,seq我想到的“明显的”事情是,使用类似于的东西预处理文件,然后一次解析一行

如果这不起作用(您的PDF看起来像一条记录只有几行长),那么您可以使用正常的文件流读取来创建一个记录序列或1000条记录或类似的内容。这不需要知道记录的详细信息,但如果您至少可以对记录进行定界,这会很方便


不管是哪种方式,最后都会得到一个惰性的seq,解析器可以读取。

你能举一些记录为例吗?该文件中的每条记录大约有10K个字符长,因此我不能在这里粘贴一条,但文件格式规范有一个很好的小例子:。我正在解析的记录是该示例中的最后5条记录,即以“20”开头的记录。我只想澄清一下:我知道如何解析记录,我的解析器对大多数文件都很好。我只是在将它扩展到巨大的输入时遇到了困难。听起来每个记录都是独立的,对吗?也就是说,你不需要来自过去(或未来)的信息记录以完全解析单个记录。如果是这样,为什么不将行作为seq{}读取呢还有Seq.iter parseRecord?让F#/CLR来担心批处理/缓冲,只关注面向行的记录解析。一旦你处理完一个记录,垃圾收集器就应该处理它。我的感觉是你应该能够以最小的内存占用来处理非常大的文件。我喜欢这个想法。我会尝试一下。