in reply to Re: How do you store a line of info from a file that you later need to sort?
in thread How do you store a line of info from a file that you later need to sort?

I have asked the user to give a name of a file, the userid, and time. I need to sort through this file with the userid and time, keeping all information pertinent to that line, then later print the results in order of line. I don't have much. This is my first attempt:
#!/usr/bin/perl print "Please enter trace file name" $tracefilename = <STDIN>; chomp $tracefilename; print "Please enter agent extension" $agentextension = <STDIN>; chomp $agentextension; print "Please enter time" $time = <STDIN>; chomp $time; open (THATFILE, "$tracefilename") || die "cannot open $tracefilename: $!"; foreach $line (@lines) { # now I'm stuck!!!
  • Comment on Re: Re: How do you store a line of info from a file that you later need to sort?
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: How do you store a line of info from a file that you later need to sort?
by tye (Sage) on Mar 13, 2001 at 00:07 UTC

    ...and if you'd get a proper login for this site, then you could edit your own replies rather than duplicating them.

            - tye (but my friends call me "Tye")
Re: Re: Re: How do you store a line of info from a file that you later need to sort?
by dneedles (Sexton) on Mar 13, 2001 at 01:41 UTC
    Hello, Unfortunately your spec is still a little vague (or I am confused). I will fill in the blanks with a couple assumptions: 1. Assume the file lines have the format: time,user id, other_parms where time is a nice numeric that I can sort. 2. Assume you want to EXTRACT only info in that file with matching user id and time, sort them by TIME, and print them. 3. Later you want to print the EXTRACTED records by the order that you read them in. If so then I would add the following psudo code to your own::
    my ($line,$timestamp,$userid,$stuff); my %Seq; my %TimeStamp; my $i=1; while ( $line=<THATFILE> ) { # PARSE THE DATA LINE ($timestamp,$userid,seq,$params)=split(/,/,$line,4); # DETERMINE IF WE WANT THE INFO ON THIS LINE if ($userid=USERIDWEWANT) { #STORE TO PRINT OUT LATER BY SEQUENCE WE FOUND THEM $Seq{$i++}=$line; #STORE TO PRINT OUT LATER BY SEQUENCE WE FOUND THEM $TimeStamp($timestamp}=$line; } } #PRINT BY TIMESTAMP foreach $line (sort keys %TimeStamp) { print "$TimeStamp{$line}\n"; } #PRINT BY SEQUENCE foreach $line (sort keys %Seq) { print "$Seq{$line}\n"; }