http://www.perlmonks.org?node_id=997360


in reply to Re^6: Processing CSV File
in thread Processing CSV File

You deserve a medal! That works perfectly!
The problem with #2 is;
If i open the .CSV in MS Excel, make a change and save it, then when i run the .pl, i get the following error:

Use of uninitialized value $vars in chomp at create-configs.pl line 18 +, <$csvfh> line 1. Use of uninitialized value $vars in split at create-configs.pl line 19 +, <$csvfh> line 1.

However, if i open the .CSV in excel, make the changes, then open it with something like Text Edit, and go to the end of each line in the CSV, and press delete, then enter (to put evreything back to its own line), then when I run the .pl it works perfectly..
Does that make sense? if not, let me know, and I will try and send you the files if possible, so you can know what i mean..
Once again, your help is invaluable..

Replies are listed 'Best First'.
Re^8: Processing CSV File
by Kenosis (Priest) on Oct 05, 2012 at 04:45 UTC

    Are you able to install Perl Modules? If so, install Text::CSV, and let me know when this is done.

    There are two reasons that the Module may serve you well in this case. The first is that it's generally a best practice to use a Module that's built to handle csv files. In your case, the csv format wasn't complex, i.e., commas within quoted fields, so just splitting on commas was OK. However, thinking long-term, your data may get more complex, and Text::CSV would be able to handle it.

    The second reason is based upon the error messages you shared. The variable $vars was uninitialized when it should have contained a value. This may be an issue of the csv file containing binary data, but I'm not sure. Text::CSV can handle this, too.

    Let me know...

      Thanks for the reply Kenosis
      I was trying to steer clear of installing modules, as the script could be used on different machines at any time all over the place, of which some I do not have control.. so was hoping to have a script that worked 'out of the box' on any machine.
      Do you think there would be any way around it?
      If there really is no other way, then perhaps I will need to explore that option.. but would prefer not to if at all possible
      Thanks

        Give the following change a try:

        open my $csvfh, '<:crlf', $csvFile or die "Unable to open $csvFile: $! +"; ^ | + - Add the :crlf