Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Problem parsing a CSV file

Status
Not open for further replies.

Haazi2

Programmer
Aug 25, 2000
51
US
I accidently placed this as a reply to another post.

I have a function which parses a CSV file then extracts records from that file and writes those records to another file. I pass references to the file handles to this function( a reference to $INFILE and $OUTFILE). When the function attempts to parse the CSV file I get the following parse error message: parse failed: No such file or directory. I am able to parse 2 other CSV files but this one particular generates this error message. Does anyone have any ideas on what could cause this parse error? Thanks
in advance for any help offered.

Here's the code:

In the main section:
my $INFILE = "/temp/info.txt";
my $OUTFILE = "/temp/master.txt";

open(IFILE, "$INFILE") || die "Can\'t open input file\n";
open(OFILE, "$OUTFILE") || die "Can\'t open output file\n";

# pass file handle references to function
writeToMasterFile(\*IFILE, \*OFILE);


# function
sub writeToMasterFile
{
my ($f1, $f2) = @_;

if ( -r $f1 )
{
print "File: $f1 exists and is readable\n";
}
else
{
print "File: $f1 does not exist and/or is not readable\n";
}

while (<$f1>)
{
chomp;
my $csv2 = Text::CSV_XS->new;
print &quot;$_\n&quot;;
if ( $csv2->parse($_))
{
my @mail_entry = $csv2->fields;
my($accttype, $fname, $mname, $lname, $email, $pphone, $bphone, $address, $city, $state, $pcode, $province, $country, $comments, $refcocust, $refcoacct, $branch, $date, $time) = @mail_entry;
#print &quot;\$date = $date\n\n&quot;;
#print &quot;\$time = $time\n\n&quot;;
($hr, $min, $sec) = split /:/, $time;
($mon, $day, $yr) = split /-/, $date;

#print &quot;\$hr = &quot;, $hr, &quot;\n&quot;;
#print &quot;\$min = &quot;, $min, &quot;\n&quot;;
#print &quot;\$sec = &quot;, $sec, &quot;\n\n&quot;;

#print &quot;\$mon = &quot;, $mon, &quot;\n&quot;;
#print &quot;\$day = &quot;, $day, &quot;\n&quot;;
#print &quot;\$yr = &quot;, $yr, &quot;\n\n&quot;;

if ( $mon == $ymon && $day == $yday && $yr == $yyr )
{

if ( $hr >= 12 )
{
print $f2 $_, &quot;\n&quot;;
}
elsif ( $mon == $tmon && $day == $tday && $yr == $tyr )
{
if ( $hr < 12 )
{
print $f2 $_, &quot;\n&quot;;
}
}
}

}
else
{
bail(&quot;parse() failed: $!\n&quot;);
}
}

}
 
First of all this is Perl not C. :)

Second, how are you executing this script?

Are you calling it from a telnet session or something like that, or are you calling it from a web server?

It considering the pathnames you have there, I assume you are doing this on a *nix platform. There are a couple of things which can cause that error:

1) There really is no such file or directory! heh. check your path and make 100% sure that it is correct.


2) The file does not allow read permissions for the user that the script is running as.

3) The directory that the file resides in does not allow read permission for the user that the script is running as.
S
verify that both of your CSV files have the same file permissions, and if they are not in the same folder, make sure that the folders have the same permissions.

Regards,
Gerald


 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top