Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

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

by BrowserUk (Patriarch)
on Apr 05, 2013 at 15:20 UTC ( [id://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.

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1027151]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2024-04-24 13:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found