Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: removing lines that are in the end of a file

by BrowserUk (Pope)
on Apr 05, 2013 at 15:20 UTC ( #1027151=note: print w/ replies, xml ) Need Help??


in reply to removing lines that are in the end of a file

The answers so far do not seem to have noticed the first line which also contains "SIL".

This is pretty trivial using File::ReadBackwards:

#! perl -slw use strict; use File::ReadBackwards; my $file = $ARGV[ 0 ]; tie *BW, 'File::ReadBackwards', $file; my $lastpos = -s( $file ); while( <BW> ) { last unless /SIL/; $lastpos = tell( BW ) } truncate $file, $lastpos; close BW;

A sample run:

C:\test>type junk35.dat 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ? 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ? 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ? 8.192375 125 SIL 8.252 125 SIL 8.464 125 SIL 8.706 125 SIL C:\test>junk35 junk35.dat C:\test>type junk35.dat 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ? 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ? 0.642375 125 SIL 1.0705 125 ??? 1.3651875 125 ??? 1.519875 125 ? 7.2140627 125 ?? 7.478125 125 ??? 7.622625 125 ?? 7.956125 125 ?

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.


Comment on Re: removing lines that are in the end of a file
Select or Download Code
Re^2: removing lines that are in the end of a file
by bhargavkanakiya (Initiate) on Apr 19, 2013 at 09:33 UTC

    Thanks a lot to you. This also removes the last line with SIL. This is not how i wanted but still you have made my task a lot easier. I can add last SIL using other software that i am currently working on.

      This also removes the last line with SIL. This is not how i wanted

      ReadBackwards() has to do strange things with tell, so a little extra work is involved. Try this version:

      #! perl -slw use strict; use File::ReadBackwards; my $file = $ARGV[ 0 ]; tie *BW, 'File::ReadBackwards', $file; my $lastpos = -s( $file ); my $len = 0; while( <BW> ) { $len = length() +1; next unless length >1; last unless /SIL/; $lastpos = tell( BW ); } truncate $file, $lastpos + $len; close BW;

      Note: You won't need the +1 in the  $len = length() +1; line if you are not on Windows.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1027151]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (16)
As of 2014-09-30 18:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (379 votes), past polls