Depends upon your definition of a "record". If your file contains fixed length records then is is fairly trivial to use perlfunc:seek and perlfunc:tell to position the file pointer to a specific record and overwrite the data in-place.

However, as most PC based filesystems do not have fixed-length record filetypes built-in as many mainframes do, fixed length records are fairly few and far between in the PC world. Most files therefore variable length "records", which means that you have to scan the file sequentially and remember the start position and length of each record as you go. It also means that you have to re-write every subsequent record unless your update is exactly the same length as the preceeding one.

However, the saving grace is that this has been done before, and being perl, that code is available to you on CPAN. Take a look at Tie::File. If your using a reasonably modern version of perl, this probably came with your distribution. It allows you to treat a file of fixed or variable length records as an array and takes care of all the file pointer shuffling and throws in some intelligent buffering to boot.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
If I understand your problem, I can solve it! Of course, the same can be said for you.


In reply to Re: File I/O by BrowserUk
in thread File I/O by ced4dad

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.