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 .

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to