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

Re^2: How can you sysread an entire file?

by NeilF (Sexton)
on Jan 13, 2006 at 23:15 UTC ( #523108=note: print w/ replies, xml ) Need Help??


in reply to Re: How can you sysread an entire file?
in thread How can you sysread an entire file?

Why do you recommend the second solution out of interest?

I mean line ends in "\n";

Sorry, but what on earth is "frobulate($1)"? I've never seen that before!?


Comment on Re^2: How can you sysread an entire file?
Re^3: How can you sysread an entire file?
by ChemBoy (Priest) on Jan 14, 2006 at 07:35 UTC

    I would recommend it because it's the least memory-intensive approach, and you're potentially using a lot of memory already. (Best would of course be to read the file line-by-line, but since you can't do that, this is the next best thing I could come up with.)

    As to the other, you didn't stipulate what you wanted to do with the records when you had them split, and I needed a dummy subroutine to show the outline right (and to note that your data is found in $1). Blame the chatterbox for the odd word choice. :-)



    If God had meant us to fly, he would *never* have given us the railroads.
        --Michael Flanders

      OK :)

      Here's an example...

      my $rec; sysopen(DF,"test.txt", O_RDONLY | O_CREAT); sysread(DF, $rec, -s DF); close DF; # Split up records into array. # Will lose \n on recs - add later. @test=split("\n",$rec); # Do some work on @test Work... Work... Work... # Build up into a single record, putting \n back in my $rec;foreach(@test){$rec.=$_."\n";} sysopen(DF,"test.txt", O_WRONLY | O_CREAT); syswrite DF,$rec; close DF;
      Does that help set the scene a little better? :)

      So basically I want to make this as efficient as possible. I have to use SYSREAD and SYSWRITE to make the IO as optimal as possible. ie: Reading a 1 meg file would take 2000 IO processes if buffered!!!!! SYSREAD will in effect take 1!

        It won't affect your IO count but

        my $rec;foreach(@test){$rec.=$_."\n";}

        Is much better coded as

        my $rec = join "\n", @test;

        roughly 3 times faster on 1000 elements.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "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://523108]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (13)
As of 2014-07-11 09:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (223 votes), past polls