Jump to content

Template:US Demographics/perlscript

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Gimmetrow (talk | contribs) at 05:07, 31 August 2006 (slightly more readable). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

# HOW TO USE THIS SCRIPT:
# Download all the CSV files. They will be located at
# http://www.census.gov/popest/states/asrh/tables/
# with filenames like SC-EST2005-03-42.csv
# The EST2005-03 indicates which file series is being used.
# The 42 indicates the state being referenced.
# File formats are going to change. The "15" in
# year 2000 get_data calls indicates that the desired data
# is between the 15th and 16th doublequote on the line. When
# the 2006 estimates come out, it'll probably shove everything
# over by two doublequotes, so you would changes those 15s to 17s.
# Put all the CSV files in the same directory with this script, 
# and execute this script. It will generate a file named
# template.txt, which is the data which needs to be inserted
# in Template:US Demographics

# It's a quick-and-dirty script, which is what Perl was
# intended for. You will want to check your data, to make
# sure you're grabbing the right numbers from the file.
# Otherwise, you're going to get some mighty strange tables.

# This script is NOT subject to the GNU Free Documentation
# License, as it expressly prohibits alteration, and this
# script will be useless if NOT altered.
# Script copyright by user ClairSamoht, August 2006.
# You may download it, modify it, and execute it ONLY for 
# maintaining Wikipedia's Template:US Demographics
# You may NOT republish or redistribute this script, or
# use it for any purpose other than intended.
# But then, it's an awfully simple script. If you're
# smart enough to figure out how to modify it for other\
# purposes, you can write the script you need from scratch
# in less time than to modify this script.


sub pct
{
$inval =$_[0];
$base  =$_[1];

$inval = stripcommas ($inval);
$base = stripcommas ($base);
if ($base < 1)
        {
        return "0.0";
        }
$portion = 100 * $inval/$base;
$retval = sprintf (" %6.2f", $portion);
return $retval;
}

sub stripcommas
{
$val = $_[0];
$sc_retval = '';

@sc_parts = split (/\,/, $val);
foreach $sc_pit (@sc_parts)
        {
        $sc_retval .= $sc_pit;
        }
return $sc_retval;
}


sub get_data
{
$useline = $_[0];
$item_number = $_[1];

@parts = split (/\"/, @lines[$useline]);
$data = stripcommas($parts[$item_number]);
return $data;
}

sub make_table
{
foreach $val (sort keys %DATA)
        {
        $DATA{$val} = '';
	}

$DATA{'fname'} = $_[0];

open (FILE, "< $DATA{'fname'}");
@lines = <FILE>;
close (FILE);
$count = @lines;


print "$DATA{'fname'} has $count lines\n";

$DATA{'state'} = @lines[1];
@parts = split (/ for /, @lines[1]);
$DATA{'state'} = $parts[1];
@parts = split (/: /, $DATA{'state'});
$DATA{'state'} = $parts[0];


$DATA{'tot2005'}     = get_data ( 4,1);

$DATA{'white2005'}   = get_data (13,1);
$DATA{'black2005'}   = get_data (14,1);
$DATA{'AIAN2005'}    = get_data (15,1);
$DATA{'asian2005'}   = get_data (16,1);
$DATA{'NHPI2005'}    = get_data (17,1);

$DATA{'nh_white2005'} = get_data (27,1);
$DATA{'nh_black2005'} = get_data (28,1);
$DATA{'nh_AIAN2005'}  = get_data (29,1);
$DATA{'nh_asian2005'} = get_data (30,1);
$DATA{'nh_NHPI2005'}  = get_data (31,1);

$DATA{'h_white2005'}  = get_data (41,1);
$DATA{'h_black2005'}  = get_data (42,1);
$DATA{'h_AIAN2005'}   = get_data (43,1);
$DATA{'h_asian2005'}  = get_data (44,1);
$DATA{'h_NHPI2005'}   = get_data (45,1);

$DATA{'tot2000'}     = get_data ( 4,15);

$DATA{'white2000'}   = get_data (13,15);
$DATA{'black2000'}   = get_data (14,15);
$DATA{'AIAN2000'}    = get_data (15,15);
$DATA{'asian2000'}   = get_data (16,15);
$DATA{'NHPI2000'}    = get_data (17,15);

$DATA{'nh_white2000'} = get_data (27,15);
$DATA{'nh_black2000'} = get_data (28,15);
$DATA{'nh_AIAN2000'}  = get_data (29,15);
$DATA{'nh_asian2000'} = get_data (30,15);
$DATA{'nh_NHPI2000'}  = get_data (31,15);

$DATA{'h_white2000'}  = get_data (41,15);
$DATA{'h_black2000'}  = get_data (42,15);
$DATA{'h_AIAN2000'}   = get_data (43,15);
$DATA{'h_asian2000'}  = get_data (44,15);
$DATA{'h_NHPI2000'}   = get_data (45,15);

if (0)
{
print OFILE "tot2005     $DATA{'tot2005'}     \n";

print OFILE "white2005   $DATA{'white2005'}   \n";
print OFILE "black2005   $DATA{'black2005'}   \n";
print OFILE "AIAN2005    $DATA{'AIAN2005'}    \n";
print OFILE "asian2005   $DATA{'asian2005'}   \n";
print OFILE "NHPI2005    $DATA{'NHPI2005'}    \n";

print OFILE "hwhite2005  $DATA{'h_white2005'}  \n";
print OFILE "hblack2005  $DATA{'h_black2005'}  \n";
print OFILE "hAIAN2005   $DATA{'h_AIAN2005'}   \n";
print OFILE "hasian2005  $DATA{'h_asian2005'}  \n";
print OFILE "hNHPI2005   $DATA{'h_NHPI2005'}   \n";

print OFILE "nhwhite2005 $DATA{'nh_white2005'} \n";
print OFILE "nhblack2005 $DATA{'nh_black2005'} \n";
print OFILE "nhAIAN2005  $DATA{'nh_AIAN2005'}  \n";
print OFILE "nhasian2005 $DATA{'nh_asian2005'} \n";
print OFILE "nhNHPI2005  $DATA{'nh_NHPI2005'}  \n";

print OFILE "tot2000     $DATA{'tot2000'}     \n";

print OFILE "white2000   $DATA{'white2000'}   \n";
print OFILE "black2000   $DATA{'black2000'}   \n";
print OFILE "AIAN2000    $DATA{'AIAN2000'}    \n";
print OFILE "asian2000   $DATA{'asian2000'}   \n";
print OFILE "NHPI2000    $DATA{'NHPI2000'}    \n";

print OFILE "hwhite2000  $DATA{'h_white2000'}  \n";
print OFILE "hblack2000  $DATA{'h_black2000'}  \n";
print OFILE "hAIAN2000   $DATA{'h_AIAN2000'}   \n";
print OFILE "hasian2000  $DATA{'h_asian2000'}  \n";
print OFILE "hNHPI2000   $DATA{'h_NHPI2000'}   \n";

print OFILE "nhwhite2000 $DATA{'nh_white2000'} \n";
print OFILE "nhblack2000 $DATA{'nh_black2000'} \n";
print OFILE "nhAIAN2000  $DATA{'nh_AIAN2000'}  \n";
print OFILE "nhasian2000 $DATA{'nh_asian2000'} \n";
print OFILE "nhNHPI2000  $DATA{'nh_NHPI2000'}  \n";
}

$template = <<EOHEADER;
| state = {{US DemogTable{{!}}state{{!}}fname{{!}}=
{{!}}p_white2000{{!}}p_black2000{{!}}p_AIAN2000{{!}}p_asian2000{{!}}p_NHPI2000{{!}}=
{{!}}h_white2000{{!}}h_black2000{{!}}h_AIAN2000{{!}}h_asian2000{{!}}h_NHPI2000{{!}}=
{{!}}p_white2005{{!}}p_black2005{{!}}p_AIAN2005{{!}}p_asian2005{{!}}p_NHPI2005{{!}}=
{{!}}h_white2005{{!}}h_black2005{{!}}h_AIAN2005{{!}}h_asian2005{{!}}h_NHPI2005{{!}}=
{{!}}d_white{{!}}d_black{{!}}d_AIAN{{!}}d_asian{{!}}d_NHPI{{!}}=
{{!}}x_white{{!}}x_black{{!}}x_AIAN{{!}}x_asian{{!}}x_NHPI{{!}}=
{{!}}h_white{{!}}h_black{{!}}h_AIAN{{!}}h_asian{{!}}h_NHPI}}
EOHEADER

$state = $DATA{'state'};
$fname = $DATA{'fname'};

$p_white2000 = pct ($DATA{'white2000'},    $DATA{'tot2000'});
$p_black2000 = pct ($DATA{'black2000'},    $DATA{'tot2000'});
$p_AIAN2000  = pct ($DATA{'AIAN2000'},     $DATA{'tot2000'});
$p_asian2000 = pct ($DATA{'asian2000'},    $DATA{'tot2000'});
$p_NHPI2000  = pct ($DATA{'NHPI2000'},     $DATA{'tot2000'});
$h_white2000 = pct ($DATA{'h_white2000'},  $DATA{'tot2000'});
$h_black2000 = pct ($DATA{'h_black2000'},  $DATA{'tot2000'});
$h_AIAN2000  = pct ($DATA{'h_AIAN2000'},   $DATA{'tot2000'});
$h_asian2000 = pct ($DATA{'h_asian2000'},  $DATA{'tot2000'});
$h_NHPI2000  = pct ($DATA{'h_NHPI2000'},   $DATA{'tot2000'});
$p_white2005 = pct ($DATA{'white2005'},    $DATA{'tot2005'});
$p_black2005 = pct ($DATA{'black2005'},    $DATA{'tot2005'});
$p_AIAN2005  = pct ($DATA{'AIAN2005'},     $DATA{'tot2005'});
$p_asian2005 = pct ($DATA{'asian2005'},    $DATA{'tot2005'});
$p_NHPI2005  = pct ($DATA{'NHPI2005'},     $DATA{'tot2005'});
$h_white2005 = pct ($DATA{'h_white2005'},  $DATA{'tot2005'});
$h_black2005 = pct ($DATA{'h_black2005'},  $DATA{'tot2005'});
$h_AIAN2005  = pct ($DATA{'h_AIAN2005'},   $DATA{'tot2005'});
$h_asian2005 = pct ($DATA{'h_asian2005'},  $DATA{'tot2005'});
$h_NHPI2005  = pct ($DATA{'h_NHPI2005'},   $DATA{'tot2005'});
$d_white = pct ($DATA{'white2005'} - $DATA{'white2000'},$DATA{'white2000'});
$d_black = pct ($DATA{'black2005'} - $DATA{'black2000'},$DATA{'black2000'});
$d_AIAN  = pct ($DATA{'AIAN2005'}  - $DATA{'AIAN2000'}, $DATA{'AIAN2000'} );
$d_asian = pct ($DATA{'asian2005'} - $DATA{'asian2000'},$DATA{'asian2000'});
$d_NHPI  = pct ($DATA{'NHPI2005'}  - $DATA{'NHPI2000'}, $DATA{'NHPI2000'} );
$x_white = pct ($DATA{'nh_white2005'} - $DATA{'nh_white2000'},$DATA{'nh_white2000'});
$x_black = pct ($DATA{'nh_black2005'} - $DATA{'nh_black2000'},$DATA{'nh_black2000'});
$x_AIAN  = pct ($DATA{'nh_AIAN2005'}  - $DATA{'nh_AIAN2000'}, $DATA{'nh_AIAN2000'} );
$x_asian = pct ($DATA{'nh_asian2005'} - $DATA{'nh_asian2000'},$DATA{'nh_asian2000'});
$x_NHPI  = pct ($DATA{'nh_NHPI2005'}  - $DATA{'nh_NHPI2000'}, $DATA{'nh_NHPI2000'} );
$h_white = pct ($DATA{'h_white2005'} - $DATA{'h_white2000'},$DATA{'h_white2000'});
$h_black = pct ($DATA{'h_black2005'} - $DATA{'h_black2000'},$DATA{'h_black2000'});
$h_AIAN  = pct ($DATA{'h_AIAN2005'}  - $DATA{'h_AIAN2000'}, $DATA{'h_AIAN2000'} );
$h_asian = pct ($DATA{'h_asian2005'} - $DATA{'h_asian2000'},$DATA{'h_asian2000'});
$h_NHPI  = pct ($DATA{'h_NHPI2005'}  - $DATA{'h_NHPI2000'}, $DATA{'h_NHPI2000'} );


$fname =~ s/SC-EST2005-//i;
$template =~ s/state/$state/gi;
$template =~ s/fname/$fname/gi;

$template =~ s/p_white2000/$p_white2000/gi;
$template =~ s/p_black2000/$p_black2000/gi;
$template =~ s/p_AIAN2000/$p_AIAN2000/gi;
$template =~ s/p_asian2000/$p_asian2000/gi;
$template =~ s/p_NHPI2000/$p_NHPI2000/gi;
$template =~ s/h_white2000/$h_white2000/gi;
$template =~ s/h_black2000/$h_black2000/gi;
$template =~ s/h_AIAN2000/$h_AIAN2000/gi;
$template =~ s/h_asian2000/$h_asian2000/gi;
$template =~ s/h_NHPI2000/$h_NHPI2000/gi;
$template =~ s/p_white2005/$p_white2005/gi;
$template =~ s/p_black2005/$p_black2005/gi;
$template =~ s/p_AIAN2005/$p_AIAN2005/gi;
$template =~ s/p_asian2005/$p_asian2005/gi;
$template =~ s/p_NHPI2005/$p_NHPI2005/gi;
$template =~ s/h_white2005/$h_white2005/gi;
$template =~ s/h_black2005/$h_black2005/gi;
$template =~ s/h_AIAN2005/$h_AIAN2005/gi;
$template =~ s/h_asian2005/$h_asian2005/gi;
$template =~ s/h_NHPI2005/$h_NHPI2005/gi;
$template =~ s/d_white/$d_white/gi;
$template =~ s/d_black/$d_black/gi;
$template =~ s/d_AIAN/$d_AIAN/gi;
$template =~ s/d_asian/$d_asian/gi;
$template =~ s/d_NHPI/$d_NHPI/gi;
$template =~ s/x_white/$x_white/gi;
$template =~ s/x_black/$x_black/gi;
$template =~ s/x_AIAN/$x_AIAN/gi;
$template =~ s/x_asian/$x_asian/gi;
$template =~ s/x_NHPI/$x_NHPI/gi;
$template =~ s/h_white/$h_white/gi;
$template =~ s/h_black/$h_black/gi;
$template =~ s/h_AIAN/$h_AIAN/gi;
$template =~ s/h_asian/$h_asian/gi;
$template =~ s/h_NHPI/$h_NHPI/gi;

print OFILE $template;
}

opendir(DIR, ".") or die "can't opendir $dirname: $!";
@files = readdir (DIR);
closedir (DIR);

$outfile = "template.txt";
open (OFILE, "> $outfile");
print OFILE <<TOPOFILE;
<noinclude>{{esoteric}}</noinclude>{{#switch: {{{state}}}
TOPOFILE

foreach $val (@files)
        {
        if ($val =~ m/csv/i)
                {
                make_table ($val);
		}
        }

print OFILE <<EOFILE;
}}
<noinclude>
[[Category:Templates using ParserFunctions|{{PAGENAME}}]]
[[Category:Demographics of the United States|*]]
</noinclude>
EOFILE

close (OFILE);