Home  |  Linux  | Mysql  | PHP  | XML
From:Shlomi Fish Date:Mon Mar 15 13:06:15 2010
Subject:Re: Replacement in 3GB file
Hi Ganesh!

First a few notes on your code.

On Monday 15 Mar 2010 14:10:25 Ganesh Babu N wrote:
> 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]");

Please see:

http://perl.net.au/wiki/Freenode_Sharp_Perl_FAQ#How_should_I_write_my_code.3F

> 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);

Why are you doing a /g substitution inside a loop checking for the same regex.
The /g will replace everything. Furthermore, you have defined three captures
and use only two. One of them should be (?:...).

> 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:

Then keep all the relevant previous lines in an array or string that will
serve as a state.

>
> 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
>

Do you want to replace all the "ns" with the "/EuclidSymbol f1". This can be
done using a loop like that:

my $symbol;
my $new_symbol;
while (my $line = <$in_fh>)
{
if (($new_symbol) = ($line =~ /....($symbol_re).../))
{
$symbol = $new_symbol;
print {$out_fh} $line;
}
else
{
$line =~ s{^(\d+\s+)ns}{$1$symbol};
print {$out_fh} $line;
}
}

Hope it helps.

Regards,

Shlomi Fish

> 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

--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
First stop for Perl beginners - http://perl-begin.org/

Deletionists delete Wikipedia articles that they consider lame.
Chuck Norris deletes deletionists whom he considers lame.

Please reply to list if it's a mailing list post - http://shlom.in/reply .
Navigate in group perl.beginners at sever nntp.perl.org
Previous Next


Your recent visits
Re: good practice in File::Find
Re: Any Good SCM tool to manage Perl Code locally
Re: Any Good SCM tool to manage Perl Code locally In-Reply-To:
Re: How to add a last-modified field to a page header ???? ....
Re: 1-line text file with numbers, need to add to them



  
© 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