我有一个脚本读取两个csv文件,并比较它们以确定一个出现在另一个中的ID是否也出现在另一个中。 我收到的错误如下:
在67112960字节的“大”请求期间内存不足,总sbrk()为348203008字节
而现在的代码:
use strict; use File::Basename; my $DAT = $ARGV[0]; my $OPT = $ARGV[1]; my $beg_doc = $ARGV[2]; my $end_doc = $ARGV[3]; my $doc_counter = 0; my $page_counter = 0; my %opt_beg_docs; my %beg_docs; my ($fname,$dir,$suffix) = fileparse($DAT,qr/.[^.]*/); my $outfile = $dir . $fname . "._IMGLOG"; open(OPT,"<$OPT"); while(<OPT>){ my @OPT_Line = split(/,/,$_); $beg_docs{@OPT_Line[0]} = "Y" if(@OPT_Line[3] eq "Y"); $opt_beg_docs{@OPT_Line[0]} = "Y"; } close(OPT); open(OUT,">$outfile"); while((my $key,my $value) = each %opt_beg_docs){ print OUT "$keyn"; } close(OUT); open(DAT,"<$DAT"); readline(DAT); #skips header line while(<DAT>){ $_ =~ s/xFE//g; my @DAT_Line = split(/x14/,$_); #gets the prefix and the range of the beg and end docs (my $pre = @DAT_Line[$beg_doc]) =~ s/[0-9]//g; (my $beg = @DAT_Line[$beg_doc]) =~ s/D//g; (my $end = @DAT_Line[$end_doc]) =~ s/D//g; #print OUT "BEGDOC: $beg ENDDOC: $endn"; foreach($beg .. $end){ my $doc_id = $pre . $_; if($opt_beg_docs{$doc_id} ne "Y"){ if($beg_docs{$doc_id} ne "Y"){ print OUT "$doc_id,DOCUMENT NOT FOUND IN OPT FILEn"; $doc_counter++; } else { print OUT "$doc_id,PAGE NOT FOUND IN OPT FILEn"; $page_counter++; } } } } close(DAT); close(OUT); print "Found $page_counter missing pages and $doc_counter missing document(s)";
基本上,我从我正在检查的文件中获取所有ID,看是否存在ID。然后,我循环并为另一个文件生成ID,因为它们是作为范围呈现的。 然后我把生成的ID和ID的散列检查它。
mmap和内存使用情况
4GB / 4GB内核虚拟机分割
为什么一个内存地址以0x开头?
识别内存映射文件
我怎样才能捕捉到一个内存exception?
还忘了说我正在使用Windows
何时/为什么要使用heapmin?
GlobalMemoryStatusEx()提供的总虚拟内存为127 teraByte
Ontotext GraphDB进程终止
logging内存访问占用空间
检查Windows下Python程序的最大内存使用情况
我不确定是不是你错误的原因,但是在你正在阅读DAT循环中,你可能想要替换它:
(my $pre = @DAT_Line[$beg_doc]) =~ s/[0-9]//g;
有了这个:
(my $pre = $DAT_Line[$beg_doc]) =~ s/[0-9]//g;
另外两条线也一样。
你不使用use warnings; ,您没有检查打开文件的错误,也没有打印出显示正在阅读的行的调试语句。
你知道输入文件的样子吗? 如果没有换行符,则一次读取整个文件,如果大的话将会是灾难性的。 注意你如何解析文件。
你正在关闭你的OUT文件句柄,然后试图在DAT循环内打印它,我想这可能是输出到随机存储器,因为你关闭了FILEHANDLE – 惊讶这没有输出错误。
我仍然不知道你的问题是什么,如果是关于错误信息,那意味着你的内存不足。 如果是关于消息本身 – 你试图消耗太多的内存。 如果这是为什么你消耗太多的内存,我首先会问你是否阅读我的消息,然后我会问你的系统有多少内存,然后我会跟进看看如果改善,如果你采取正则表达式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。