[Omaha.pm] misc notes

Jay Hannah jay at jays.net
Mon Sep 20 21:41:55 CDT 2004


Here's the fruits of our labor...



# ===============================================================

#!/usr/bin/perl

#unless (open INP_MASTER, "</home/q8050_12/perl/master.in"){
unless (open INP_MASTER, "<master.in"){
die "Cannot open the master input file.";
}

unless (open OUT_MASTER, ">master.out") {
die "Cannot open the master output file.";
}

unless (open INP_TRANS, "<trans.in") {
die "Cannot open the transaction input file.";
}

# Here's all the lenghts of all of our fields in master.in:
my @master_field_lengths = (
    10, 25, 15, 25, 15, 15, 15, 15, 15, 15, 15, 15, 100, 15, 5, 15
);

# ------------------------------------
# Step 1: Read master.in into memory.
# ------------------------------------
my %master;   # <-- we're going to slurp the entire file into this hash
while (<INP_MASTER>) {
    my $line = $_;
    chomp $line;
    my @columns;     # <-- each line of data will go in here temporarily
    foreach my $length (@master_field_lengths) {
       my $column = substr $line, 0, $length, undef;
       $column =~ s/\s+$//;
       push @columns, $column;
    }
    # Debug info:
    #print "I just read this into memory:\n";
    #print join "|", @columns;
    #print "\n";

    # Bug: Check for dupes in master.in before memorizing this!
    # Remember this line of data for later.
    $master{$columns[0]} = [ @columns ];
}

# ------------------------------------
# Step 2: Read trans.in and do stuff
# ------------------------------------
my %counts;
while (<INP_TRANS>) {
    my $line = $_;
    chomp $line;
    $line =~ s/[^ -~]//g;  # Remove non-printable characters!
    print "[$line]\n";
    my $code = substr $line, 0, 2;
    my $key  = substr $line, 2, 10;
    $key =~ s/\s+$//;
    my $data = substr $line, 12;
    if ($code eq "00") {
       print "   Deleting $key.\n";
       delete $master{$key};
    } elsif ($code eq "01") {
       if (defined $master{$key}) {
          print "   ERROR! You attempted to add key '$key', ";
          print "but that key already exists.\n";
       } else {
          print "   Adding $key.\n";
          $master{$key} = [$key];
       }
    } elsif ($code eq "AA") {
       print "   Changing location for $key from '$master{$key}[1]' to 
'$data'.\n";
       $master{$key}[1] = $data;
    } elsif ($code eq "AB") {
       print "   Changing model number for $key from '$master{$key}[2]' 
to '$data'.\n";
       $master{$key}[2] = $data;
    } elsif ($code eq "AC") {
       print "   Changing the memory configuration for $key from 
'$master{$key}[3]' to '$data'.\n";
       $master{$key}[3] = $data
    }


    $counts{$code} = $counts{$code} + 1;
}

print "\nHere are your counts:\n";
foreach $x (sort keys %counts) {
    print "$x: $counts{$x}\n";
}

# ------------------------------------
# Step 3: Dump %master out to master.out
# ------------------------------------
my $format;
foreach my $length (@master_field_lengths) {
    $format = $format . '%-' . $length . 's';
}

foreach $key (sort keys %master) {
    my $dataref = $master{$key};
    my @data = @$dataref;
    printf OUT_MASTER $format, @data;
    print OUT_MASTER "\n";
}


close INP_MASTER;
close OUT_MASTER;
close INP_TRANS;



# ===============================================================



[jhannah-mac:~/Desktop/tmp] jhannah% more j4.pl

my $one = 0;
my $two = 0;
my $three = 0;

for (1..10) {
    my $num = int(rand(3)) + 1;
    print "$num\n";

    if ($num == 1) {
       $one = $one + 1;
    } elsif ($num == 2) {
       $two = $two + 1;
    } elsif ($num == 3) {
       $three = $three + 1;
    }
}

print "Ones: $one\n";
print "Twos: $two\n";
print "Threes: $three\n";



[jhannah-mac:~/Desktop/tmp] jhannah% more j5.pl

my %counts;

for (1..1000) {
    my $num = int(rand(9)) + 1;
    print "$num ";

    $counts{$num} = $counts{$num} + 1;
}

print "\nHere are your counts:\n";
foreach $key (sort keys %counts) {
    print "$key: $counts{$key}\n";
}


[jhannah-mac:~/Desktop/tmp] jhannah% more j6.pl

my @master_field_lengths = (

    10, 25, 15, 25, 15, 15, 15, 15, 15, 15, 15, 15, 100, 15, 5, 15

);


my $format;
foreach my $length (@master_field_lengths) {
    $format = "$format $length ";
    print "$format\n";
}

#  %-10s%-25s%-15s...


    $format = $format . " $length ";
    $format .= " $length ";



    $format = $format . '%-' . $length . 's';


[jhannah-mac:~/Desktop/tmp/tmp] jhannah% more j.pl
#!/usr/bin/perl

my %hash = (
   "monthone" => 'Jan',
   "monthtwo" => 'Feb',
   3 => 'Mar'
);

print "    $hash{'monthone'}         $hash{3}       \n";
$hash{3} = "March Madness";
print "    $hash{'monthone'}         $hash{3}       \n";


my @array = (
    "Jun", "Jul", "Aug"
);

print "   $array[0]       $array[2]       \n";
$array[2] = "Augusto!";
print "   $array[0]       $array[2]       \n";

print "$array[1]     $hash{'monthtwo'}  \n";
$hash{'Jay'} = "Hannah";
$hash{3} = "Three";
print "$hash{'Jay'}   $hash{3}   $array[2] \n";


[jhannah-mac:~/Desktop/tmp/tmp] jhannah% more j2.pl

my %hash = (
    'chair'   => 'pizza',
    'monitor' => 'screen',
    'TV'      => 'football'
);

my $key;
foreach $key (keys %hash) {
    print "KEY: $key           VALUE: $hash{$key}\n";
}

delete $hash{chair};
if (defined $hash{chair}) {
    print "There is a chair!\n";
} else {
    print "There is NO chair!\n";
}




delete $hash{'TV'};
$hash{'Jay'} = "Motorcycle";


[jhannah-mac:~/Desktop/tmp/tmp] jhannah% more j3.pl


if ($a) {
    # ...do something...
} elsif ($b) {
    # ...do something...
    # ...do something...
    if ($x) {
       print "Blah!\n";
    } else {
       if ($y) {
          print "yargh!\n";
          if ($myval) {
             die "Can't do that!";
          }
       }
    }
} elsif ($c) {
    # ...do something...
} else {
    # ...do something...
}


[jhannah-mac:~/Desktop/tmp/tmp] jhannah% more j4.pl

$var = "Jay";


print "blah\n";
print 'blah\n';
print "\n";

print "$var\n";
print '$var\n';
print "\n";
print "  '$var'  \n";



[jhannah-mac:~/Desktop/tmp/tmp] jhannah% more prog.pl
#!/usr/bin/perl

open (IN, "infile.txt");
open (OUT, ">outfile.txt");

while (<IN>) {
    my $line = $_;
    print OUT "I just read this line: $line";
}


--------------


$a FALSE
$b TRUE
$x FALSE
$y TRUE
$myval FALSE

my $string = "Jay Hannah";
$string =~ s/a/A/;

"JAy HAnnAh";

Regular expressions

$string =~ s/   /    /;

\s    a space
\s+   one or more spaces
$     end of string

[abc]   a or b or c
[^abc]  NOT a or b or c
[ -~]   ASCII characters -space- through ~
[^ -~]  NOT ACII -space- through ~


perldoc perl


perldoc perlre

s/a/b/;    Change one a to b
s/a/b/g;   Change ALL as to bs
s/a/b/i;   Change as or As to bs
s/a/b/gi;  Change ALL as or As to bs
s/a/b/ig;  Change ALL as or As to bs







More information about the Omaha-pm mailing list