Perl Tutorial

Fundamentals

Input and Output

Control Flow

Arrays and Lists

Hash

Scalars

Strings

Object Oriented Programming in Perl

Subroutines

Regular Expressions

File Handling

Context Sensitivity

CGI Programming

Misc

Reading a CSV File in Perl

Reading CSV (Comma-Separated Values) files is a common operation in many programming tasks. In Perl, there are a few ways to do this, but the most robust method is using the Text::CSV module from CPAN. This tutorial will guide you on how to read a CSV file using Perl.

1. Installation

First, you'll need to install the Text::CSV module. You can do this using cpan:

cpan install Text::CSV

2. Reading a CSV File

Here's a step-by-step guide on how to read a CSV file using the Text::CSV module:

use strict;
use warnings;
use Text::CSV;

# Create a new CSV parser instance
my $csv = Text::CSV->new({
    binary    => 1,  # Allow special characters
    auto_diag => 1,  # Report irregularities
});

# Open the CSV file
open my $fh, '<', 'data.csv' or die "Could not open file: $!";

# Read the CSV file line-by-line
while (my $row = $csv->getline($fh)) {
    # $row is now an array reference containing fields of the current row
    print "@$row\n";
}

# Close the filehandle
close $fh;

3. Advanced Reading

If your CSV has headers, you can map each row to a hash for easier access:

# Assuming data.csv has headers: name, age, email
my $headers = $csv->getline($fh);  # Get the headers

$csv->column_names($headers);  # Set column names

while (my $row = $csv->getline_hr($fh)) {
    print "Name: $row->{name}, Age: $row->{age}, Email: $row->{email}\n";
}

4. Error Handling

Using auto_diag => 1 when creating the CSV object is helpful as it automatically reports issues with the CSV format. If you'd like to handle errors manually:

unless ($csv->parse($line)) {
    my $error = $csv->error_input;
    warn "Failed to parse line: $error";
    next;  # skip to next line or handle error as needed
}
my @fields = $csv->fields();

5. Conclusion

The Text::CSV module provides a comprehensive and robust way to handle CSV files in Perl. By using it, you can ensure that your script can deal with a variety of CSV formats and edge cases. This tutorial covered reading a CSV file, but the module also supports creating and manipulating CSV content. It's a valuable tool for any Perl programmer dealing with data in CSV format.

  1. CSV parsing in Perl example:

    • Description: CSV (Comma-Separated Values) parsing involves reading and processing data stored in CSV format, where fields are separated by commas.
    • Code Example:
      use Text::CSV;
      
      my $csv = Text::CSV->new({ binary => 1 });
      
      open my $fh, '<', 'data.csv' or die "Could not open file: $!";
      
      while (my $row = $csv->getline($fh)) {
          # Process each row
          print join(', ', @$row), "\n";
      }
      
      close $fh;
      
  2. Using Text::CSV module in Perl:

    • Description: The Text::CSV module in Perl provides a convenient way to parse and manipulate CSV data.
    • Code Example:
      use Text::CSV;
      
      my $csv = Text::CSV->new({ binary => 1 });
      
  3. Reading and parsing CSV data in Perl:

    • Description: Reading and parsing CSV data involve opening a CSV file, using the Text::CSV module to parse each row, and processing the data.
    • Code Example (combining with #1):
      # ... (same as CSV parsing example)
      
  4. Perl CSV reader script:

    • Description: A CSV reader script is a Perl script designed to read and process CSV data from a file.
    • Code Example (a simplified script):
      use Text::CSV;
      
      my $csv = Text::CSV->new({ binary => 1 });
      
      open my $fh, '<', 'data.csv' or die "Could not open file: $!";
      
      while (my $row = $csv->getline($fh)) {
          # Process each row
          print join(', ', @$row), "\n";
      }
      
      close $fh;
      
  5. CSV file processing with Perl:

    • Description: CSV file processing in Perl involves opening a CSV file, reading its content, and performing operations on the data.
    • Code Example (similar to #4):
      # ... (same as Perl CSV reader script)
      
  6. Handling headers in Perl CSV files:

    • Description: CSV files often have headers. The Text::CSV module allows you to handle headers easily.
    • Code Example:
      use Text::CSV;
      
      my $csv = Text::CSV->new({ binary => 1, header => 1 });
      
      open my $fh, '<', 'data.csv' or die "Could not open file: $!";
      
      my $header = $csv->getline($fh);  # Get the header
      
      while (my $row = $csv->getline($fh)) {
          # Access columns using header names
          print "Name: $row->{Name}, Age: $row->{Age}\n";
      }
      
      close $fh;
      
  7. Importing CSV data into Perl arrays or hashes:

    • Description: You can import CSV data into arrays or hashes for further manipulation.
    • Code Example (building on #6):
      # ... (same as Handling headers in Perl CSV files)
      
  8. CSV file I/O with Perl:

    • Description: CSV file I/O involves reading from and writing to CSV files. The Text::CSV module handles both input and output operations.
    • Code Example (writing to a CSV file):
      use Text::CSV;
      
      my $csv = Text::CSV->new({ binary => 1, auto_diag => 1, eol => "\n" });
      
      open my $fh, '>', 'output.csv' or die "Could not open file: $!";
      
      my $header = ["Name", "Age"];
      $csv->print($fh, $header);  # Print header
      
      my $row = ["Alice", 25];
      $csv->print($fh, $row);  # Print data row
      
      close $fh;