Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

help me on seek and tell function

by dee00zee (Novice)
on Nov 24, 2004 at 07:04 UTC ( [id://410070]=perlquestion: print w/replies, xml ) Need Help??

dee00zee has asked for the wisdom of the Perl Monks concerning the following question:

I want to add "and brothers" after the
word "sister" in the third sentence .
I want to write to the same file and use seek and tell
function.


DATA
adam is a fisherman
he lives in the village
while her sister work as data entry clerk

My code doesn't work
open(IN,"+<datum"); while(<IN>) { if (/sister/) { $where=tell(IN); $add="and brothers"; seek(IN,$where,0); print IN "$add"; next; } else { @lines = split(/\n+/); next; } } close IN;

Edited by Chady -- added code tags.

Replies are listed 'Best First'.
Re: help me on seek and tell function
by davido (Cardinal) on Nov 24, 2004 at 07:31 UTC

    Using seek and tell to update a file will be most useful when writing files with fixed-length records. There is a problem with the method you're trying to accomplish, in that if what you're writing is anything more or less than the exact size of what you're replacing, you'll either not completely overwrite the word you're trying to substitute, or you'll overwrite it and more. There is no "insert into" function, when dealing directly with flat files. Files grow only at the bottom end.

    The most common idiom for dealing with this problem is to read one file line by line, and for each line read, process that line, and write it back out to a new file. After you're done, you rename the new file over the old one, and presto, you're done.

    Another common approach is to use Tie::File. This module allows you to treat your file like an ordinary array, altering the contents of individual elements, inserting elements, deleting elements, splicing, and so on. Tie::File provides a layer of abstraction from the file, to hide the ugly details of working with files.

    Good luck!


    Dave

Re: help me on seek and tell function
by tachyon (Chancellor) on Nov 24, 2004 at 07:15 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://410070]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-04-18 13:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found