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/