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

First off, this is my 5th day trying to learn perl with absolutely NO previous programing experience. As a good first project, I am trying to create a text file with random data and then writing another program to pull out SOME of that data and make it presentable. Here is my first program and it seems to work well.

#!/usr/bin/perl use Locale::Currency::Format; use Text::CSV; use Data::Random qw(:all); use strict; use warnings; my @names = ( 'adrian','reid','evan','mike','fred','shane'); my @amount = (-100 .. 100); my $writefile = 'TextFile.txt'; open(my $fh, '>', $writefile) or die "Could not open file '$writefile' +$!"; for (my $count =30; $count >1; $count--) { my $randomnames = @names[rand @names]; my $random_date = rand_date(); my $randomamount = @amount[rand @amount]; $randomamount = currency_format('USD', $randomamount, FMT_SYMBOL); print $fh "$randomnames,$random_date,$randomamount\n"; } close $writefile; print "Write Successfully Completed\n"

The second half of this problem is where I get confused. I want to be able to search for a name (adrian for example) and see all the lines that contain the name sorted by date. This is all I have so far.

use Locale::Currency::Format; use Data::Random qw(:all); use strict; use warnings; my $readfile = 'TextFile.txt'; print "Search for a name: "; my $userinput = <>;

Replies are listed 'Best First'.
Re: Reading and manipulating text files
by toolic (Bishop) on Apr 08, 2015 at 19:17 UTC
    use strict; use warnings; print "Search for a name: "; my $userinput = <>; chomp $userinput; my %data; my $readfile = 'TextFile.txt'; open(my $fh, '<', $readfile) or die "Could not open file '$readfile'$! +"; while (<$fh>) { chomp; my ($name, $date, $amount) = split /,/; $data{$date} = $_ if $name eq $userinput; } print "$data{$_}\n" for sort keys %data; __END__ mike,2015-07-26,$-93.00 mike,2015-10-16,$69.00 mike,2015-11-08,$28.00 mike,2016-04-02,$95.00

    • You could use Text::CSV, but this was trivial enough for split
    • Store the data in a hash, with the date as a key and the whole line as the value. See also perldsc.

      Wow that was fast! I can see where this could be a great community to be a part of. THANKS!

Re: Reading and manipulating text files
by GotToBTru (Prior) on Apr 08, 2015 at 19:19 UTC

    Check out this: File IO Tutorial. You use Text::CSV; in your writing program but never actually use it. Just printing with commas between the fields probably seems simple enough to do it directly, but if you start to work with more complicated data, you will appreciate the module. Check out Text::CSV. It will certainly come in handy with your reading program.

    Dum Spiro Spero

      Thanks for the tip! I will look into it for sure!

Re: Reading and manipulating text files
by Anonymous Monk on Apr 09, 2015 at 14:03 UTC

    This is not related to the question you asked, but I would like to note the impressive list of things you did right in your script:

    • use strict;
    • use warnings;
    • Three-argument open()
    • Lexical file handle (open( my $fh ...)
    • Status check on open (open ... or die ...)

    Keep up the good work.