Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

[SOLVED] Output to another file help

by jaffinito34 (Acolyte)
on Nov 08, 2012 at 21:14 UTC ( #1002984=perlquestion: print w/replies, xml ) Need Help??
jaffinito34 has asked for the wisdom of the Perl Monks concerning the following question:

I'm working on a script where I'm given a CSV file with info (first and last names, ssn, address, etc) and I first need to separate everything, which the code does, but then I need to make an output file with the first letter of the first name, last 3 letters of last name, and more... My problem is the output file is blank after I run the script to see if anything is getting written in. See code below

#! /usr/bin/perl # CSC 310 Project # 1 print "Enter filename: "; chomp($fileName = <STDIN>); open (FILE, '<', $fileName) || die ("Could not open $fileName\n"); while ($line = <FILE>){ print "\n"; ($lastName,$firstName,$ssn,$address,$city,$state,$zip,$phone) = sp +lit ',', $line; print "$lastName, $firstName\n"."$ssn\n"."$address\n", "$city $sta +te $zip\n"; open (PSWD, '>>', 'passwd.txt'); print PSWD "$firstName[1]\n"; }

Any help or reference to help is appreciated!

Replies are listed 'Best First'.
Re: Output to another file help
by roboticus (Chancellor) on Nov 08, 2012 at 21:21 UTC


    You're treating $firstName as an array reference, but it's presumably a string. What you want to do is create a variable that holds the first initial, then you can print that. Something like this:

    my $firstName = 'Marco'; my $firstInitial = substr($firstName, 0, 1); print "First initial is '$firstInitial'\n";

    Read the documentation for substr to see how it works.


    When your only tool is a hammer, all problems look like your thumb.

      Nevermind, found out about lc() function.

      PERFECT!, any ideas how to quickly convert the firstInitial to lowercase? Right now my script outputs the first initial, first 3 of the last name, and last 4 of ssn, but it does so that it looks like this:

      First, Last, 000-000-0000, etc...

      output: FLas0000

      I'm trying to get it like: flas0000

Re: Output to another file help
by space_monk (Chaplain) on Nov 09, 2012 at 01:29 UTC
    Please in the name of whatever deity/deities you worship, stop using "split" to break up lines of CSV files and use Text::CSV or a similar library instead.

    In the particular example, the original program is reading in an address, which is almost certain to contain a comma somewhere, and the normal way round that is to quote the field. split won't handle this, but CSV parsing libraries such as Text::CSV will take it in their stride.

    A Monk aims to give answers to those who have none, and to learn from those who know more.
Re: Output to another file help
by Kenosis (Priest) on Nov 08, 2012 at 22:13 UTC

    ...I need to make an output file with the first letter of the first name, last 3 letters of last name...

    use strict; use warnings; my $firstName = 'PATRICK'; my $lastName = 'STERL'; my $fileNamePart = "$firstName$lastName" =~ s/^(.).+(...)$/\L$1$2/r; warn qq{Be careful: "$fileNamePart" may be an obscene word.};

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1002984]
Approved by toolic
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (2)
As of 2018-03-25 02:05 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (299 votes). Check out past polls.