Home  |  Linux  | Mysql  | PHP  | XML
From:Ganesh Babu N Date:Mon Mar 15 12:10:25 2010
Subject:Replacement in 3GB file
Dear All,

I am using the following code to replace certain information in binary mode.

$s=time();
open(FH, "$ARGV[0]");
open(OUT, ">$ARGV[1]");
binmode FH;
binmode OUT;
$/=undef;
$line=<FH>;
$line=~s!(\d{3}\s(\/[^\n]*? f1)\s*([^\n]+sh\s*)+?\d{3}\s)ns!$1$2!gs
while($line=~/(\d{3}\s(\/[^\n]*? f1)\s*([^\n]+sh\s*)+?\d{3}\s)ns/gs);
print OUT $line;
$e=time();
$r=$e-$s;
close(FH);
close(OUT);
print "Done...\nRuntime: $r seconds";

This is code is loading entire file content and doing the replacement.
If we read line by line we can avoid the out of memory problem. But my
replacement is depending on previous line. The below is the input:

224 /EuclidSymbol f1
(D) -22 673 sh
.....
320 ns
.....
221 ns

The output should be as follows:

224 /EuclidSymbol f1
(D) -22 673 sh
.....
320 /EuclidSymbol f1
.....
221 /EuclidSymbol f1

I tried with Tie::File but is not loading Binary data. Please suggest
how can i solve the problem. My file size is around 3GB

Regards,
Ganesh
Navigate in group perl.beginners at sever nntp.perl.org
Previous Next


Your recent visits
Re: prepare(SELECT ... FROM TABLE) error
Re: 1-line text file with numbers, need to add to them
Re: Modeling FIFO financial transactions in Perl
stripped output from Net::SSH2
Re: Any Good SCM tool to manage Perl Code locally



  
© No Copyright
You are free to use Anything, but please consult your advocate before doing so as this website
also list content from other sources which may be copyrighted.
Site Maintained by Zareef Ahmed
Powered By PHP Consultants